sql - 防止自动递增整数主键?

标签 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

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/

相关文章:

sql - PostgreSQL 与 json 数组中的模式反向 LIKE

Python3 - 有没有一种方法可以在一个非常大的 SQlite 表上逐行迭代,而无需将整个表加载到本地内存中?

mysql - MyIsam MRG——管理独特性的最佳实践

mysql - 在 MySQL 中同时使用 AUTO_INCREMENT 和 PRIMARY KEY 有什么意义?

mysql - 如何将 'if clause' 放入 SQL 字符串中?

sql - 用户自定义函数性能劣势

MySQL - 如何使用列约束声明主键?

Android SQLite 自动增量

php - 通过 pdo 让 MDB2 与 sqlite3 一起工作

sql - 在不违反主键和唯一约束的情况下更改表结构