我正在使用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) );
Sean Bright.. 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认同)
Andrew Cox.. 10
看起来AUTO_INCREMENT应该是AUTOINCREMENT,参见http://www.sqlite.org/syntaxdiagrams.html#column-constraint
这在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错误代码.
看起来AUTO_INCREMENT应该是AUTOINCREMENT,参见http://www.sqlite.org/syntaxdiagrams.html#column-constraint
你可以试试
CREATE TABLE fileInfo ( fileid INTEGER PRIMARY KEY AUTOINCREMENT, name STRING, status INTEGER NOT NULL );