sqlite创建表列默认值不起作用

时间:2019-02-07 20:08:39

标签: sql sqlite

我想执行一个sqlite查询,该查询返回某列具有(空)值的行。我尝试了许多变体,例如

SELECT ContribId FROM stack_contrib_tab WHERE BatchId IS NULL
SELECT ContribId FROM stack_contrib_tab WHERE BatchId ISNULL

这些返回所有行,无论BatchId是否为null。感兴趣的行在DbVisualizer列中显示“(null)”。所以我以为列可能真的是空的,所以我尝试了

SELECT ContribId FROM stack_contrib_tab WHERE BatchId = ''
SELECT ContribId FROM stack_contrib_tab WHERE BatchId = ""
SELECT ContribId FROM stack_contrib_tab WHERE BatchId = '""'

这些没有导致错误,但也没有结果集。然后我想也许是字面上的'(null)',所以我尝试了

SELECT ContribId FROM stack_contrib_tab WHERE BatchId = '(null)'

这也导致结果集为空。然后我想也许我会强制默认值为null,所以我创建了这样的表列:

BatchId DEFAULT NULL

那也不起作用。该字段仍然显示(空),查询的行为方式相同。然后我想,好的,我将使用0而不是NULL。所以我创建了类似

的字段
BatchId INTEGER DEFAULT 0

你猜对了。那也不起作用。该列仍显示(空)。然后我读到某个地方,您也必须将列设置为NOT NULL,所以我尝试了

BatchId INTEGER DEFAULT 0 NOT NULL

现在我得到了错误

  

org.sqlite.SQLiteException:[SQLITE_CONSTRAINT_NOTNULL] A NOT NULL   约束失败(NOT NULL约束失败:   stack_contrib_tab.BatchId)

我在做什么错了?

更新:我成功将BatchId设置为0,而不是null。该错误是稍后在插入过程中发生的,而不是我想象的那样在创建表时发生的。

0 个答案:

没有答案