【问题标题】:AUTO_INCREMENT in sqlite problem with pythonpython的sqlite问题中的AUTO_INCREMENT
【发布时间】:2010-10-05 06:00:06
【问题描述】:

我在 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)
);

【问题讨论】:

    标签: python sqlite


    【解决方案1】:

    这在SQLite FAQ 中得到解决。 Question #1.

    其中规定:

    如何创建自动增量 领域?

    简短回答:声明的列 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() 这将返回整数键 最近的插入操作。

    注意整数键是一 大于最大的键 在插入之前的表中。 新密钥将是唯一的 当前在表中的键,但它 可能与已被 以前从表中删除。到 创建唯一的密钥 表的生命周期,添加 INTEGER 的 AUTOINCREMENT 关键字 主键声明。那么关键 选择的将比 有史以来最大的密钥 那张桌子。如果最大可能 密钥以前存在于 表,那么 INSERT 将失败 SQLITE_FULL 错误代码。

    【讨论】:

    • 我喜欢这种类型的答案。你应该把它压缩成 RTFM :)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你可以试试

      创建表文件信息
      (
      fileid 整数主键自动增量,
      名称字符串,
      状态整数非空
      );

      【讨论】:

        【解决方案4】:

        我们刚刚更改了订单

        NOT NULL, AUTO_INCREMENT 
        

        AUTO_INCREMENT NOT NULL,
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-14
          • 1970-01-01
          • 2021-05-05
          • 2021-02-24
          • 2013-02-06
          • 2015-06-15
          • 1970-01-01
          • 2016-10-02
          相关资源
          最近更新 更多