我有一个 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
构建 sqlite compile option ,但我不想只针对此特定列禁用全局行为。
有趣的是,如果我不包含 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 值并保留主键约束?
最佳答案
Autoincrement行为仅适用于声明为 INTEGER PRIMARY KEY
的列。所以禁用它的最简单方法是:
- 将列声明为
UNIQUE
而不是PRIMARY KEY
。 - 将列类型声明为
INT
而不是INTEGER
。
请注意,任何一个都会为您提供一个具有整数亲和性的列,而不是被限制为仅包含整数。
关于sql - 防止自动递增整数主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17053167/