【发布时间】:2013-06-07 20:06:00
【问题描述】:
我有一个 sqlite 表(sqlite 版本 3.7.3),其中插入到主键列的空值会自动递增:
sqlite> CREATE TABLE foo(bar INTEGER NOT NULL PRIMARY KEY);
sqlite> INSERT INTO foo(bar) VALUES(NULL);
sqlite> SELECT * FROM foo;
1
在sqlite docs 中,它表明将AUTOINCREMENT 关键字添加到列应该会创建此行为,但似乎没有关键字可以防止自动递增。. .
我还发现我可以使用 SQLITE_OMIT_AUTOINCREMENT compile option 构建 sqlite,但我不想全局禁用该行为,仅针对此特定列。
有趣的是,如果我不包含 PRIMARY KEY 约束,我会得到想要的行为:
sqlite> CREATE TABLE FOO(bar integer NOT NULL);
sqlite> INSERT INTO FOO(bar) VALUES(NULL);
SQL error: foo.bar may not be NULL
如何定义表以便拒绝 NULL 值并保留主键约束?
【问题讨论】:
标签: sql sqlite primary-key auto-increment notnull