使用rowid整数主键时,SQLite中的强制约束错误

时间:2013-01-15 20:23:02

标签: android sqlite constraints

我使用以下命令创建了一个表:

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时,是否有办法抛出约束错误?

2 个答案:

答案 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别名,同时也阻止了空插入。