我使用以下命令创建了一个表:
CREATE TABLE Person (id INTEGER PRIMARY KEY NOT NULL, name TEXT NOT NULL)
我遇到的问题是尽管存在NOT NULL约束,我仍可以为id
列插入NULL。据我所知,这是因为id
列现在是rowid
的别名。
如果我将id
的数据类型更改为INT而不是INTEGER,则约束按预期工作但我丢失了rowid
别名(以及随之而来的好处)。
我的问题是:对于作为rowid
别名的列传递NULL时,是否有办法抛出约束错误?
答案 0 :(得分:1)
我遇到的问题是,尽管存在NOT NULL约束,我仍可以为id列插入NULL。
如果您尝试为null
插入INTEGER PRIMARY KEY
,SQLite将默默使用下一个适当的ID。
SQLite可以方便地将INTEGER PRIMARY KEY
解释为INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
。因此,为第一行插入null
id将创建一个id为1的行,依此类推。
答案 1 :(得分:0)
这里的简短回答似乎是没有办法维护rowid
别名,同时也阻止了空插入。