防止自动增量整数主键?

big*_*eed 5 sql sqlite primary-key auto-increment notnull

我有一个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
Run Code Online (Sandbox Code Playgroud)

sqlite文档中,它表明将AUTOINCREMENT关键字添加到列应该会创建此行为,但似乎没有关键字来阻止自动递增...

我还发现我可以使用SQLITE_OMIT_AUTOINCREMENT compile选项构建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
Run Code Online (Sandbox Code Playgroud)

如何定义表以便拒绝NULL值保持主键约束?

dan*_*n04 7

自动增量行为仅适用于声明为的列INTEGER PRIMARY KEY.所以最简单的禁用方法是:

  • 声明列UNIQUE而不是PRIMARY KEY.
  • 声明列类型INT而不是INTEGER.

请注意,任何一个都会为您提供一个具有整数关联的列,而不是被限制为仅包含整数.

  • 您可能还希望将 UNIQUE 与 NOT NULL 结合起来,以防止在表中创建“无id”记录。 (2认同)