AUTO_INCREMENT 在 sqlite 问题与 python

新手上路,请多包涵

我在 python 2.5 中使用 sqlite。我收到以下语法的 sqlite 错误。我环顾四周,在此页面上看到了 AUTOINCREMENT http://www.sqlite.org/syntaxdiagrams.html#column-constraint 但这也不起作用。没有 AUTO_INCREMENT 我的表可以被创建。

 An error occurred: near "AUTO_INCREMENT": syntax error
CREATE TABLE fileInfo
(
fileId int NOT NULL AUTO_INCREMENT,
name varchar(255),
status int NOT NULL,
PRIMARY KEY (fileId)
);

原文由 user34537 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 979
2 个回答

SQLite FAQ 中解决了这个问题。 问题#1

其中指出:

如何创建 AUTOINCREMENT 字段?

简短回答:声明为 INTEGER PRIMARY KEY 的列将自动递增。

答案很长:如果你将表的一列声明为 INTEGER PRIMARY KEY,那么每当你向表的该列插入 NULL 时,NULL 会自动转换为一个整数,该整数比该列覆盖表中的所有其他行,如果表为空,则为 1。 (如果最大可能的整数键为 9223372036854775807,则随机选择一个未使用的键值。)例如,假设您有一个这样的表:

CREATE TABLE t1( a INTEGER PRIMARY KEY, b INTEGER ); 有了这个表,声明

INSERT INTO t1 VALUES(NULL,123); 在逻辑上等同于说:

INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123); 有一个名为 sqlite3_last_insert_rowid() 的函数,它将返回最近插入操作的整数键。

请注意,整数键比插入之前表中的最大键大 1。新键在当前表中的所有键中都是唯一的,但它可能与先前已从表中删除的键重叠。要创建在表的生命周期内唯一的键,请将 AUTOINCREMENT 关键字添加到 INTEGER PRIMARY KEY 声明中。然后选择的键将比该表中曾经存在的最大键多一个。如果最大可能的键以前存在于该表中,则 INSERT 将失败并返回 SQLITE_FULL 错误代码。

原文由 Sean Bright 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题