当前位置:  开发笔记 > 编程语言 > 正文

与python的sqlite问题中的AUTO_INCREMENT

如何解决《与python的sqlite问题中的AUTO_INCREMENT》经验,为你挑选了3个好方法。

我正在使用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



1> Sean Bright..:

这在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 :)

2> Andrew Cox..:

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



3> Jack Edmonds..:

你可以试试

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

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有