我有一个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值保留主键约束?

最佳答案

Autoincrement行为仅适用于声明为INTEGER PRIMARY KEY的列。因此,禁用它的最简单方法是:

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

  • 请注意,任何一个都会为您提供一列具有整数亲和力的列,而不是被约束为仅包含整数。

    关于sql - 防止自动递增整数主键?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17053167/

    10-16 17:08