与python的sqlite问题中的AUTO_INCREMENT

12 python sqlite

我正在使用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)
);
Run Code Online (Sandbox Code Playgroud)

Sea*_*ght 40

这在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错误代码.

  • 我喜欢这种答案.你应该压缩到RTFM :) (3认同)

And*_*Cox 10

看起来AUTO_INCREMENT应该是AUTOINCREMENT,参见http://www.sqlite.org/syntaxdiagrams.html#column-constraint


Jac*_*nds 6

你可以试试

CREATE TABLE fileInfo
(
fileid INTEGER PRIMARY KEY AUTOINCREMENT,
name STRING,
status INTEGER NOT NULL
);