SQite - AUTO INCREMENT不起作用

时间:2018-03-16 10:05:25

标签: sql datetime sqlite

我有一个包含数据的表TABLE1。另一个干净的表TABLE2如下:

"TABLE2"(ipt TEXT,instant NUM, id integer auto_increment);

我想在TABLE1中选择IP和instant并将其插入TABLE2但我不知道为什么auto_increment不起作用。

如果有人有想法。

1 个答案:

答案 0 :(得分:1)

AUTOINCREMENT只能在一种情况下使用。这是针对使用INTEGER PRIMARY KEY的类型/约束定义的列。

auto_increment 不是有效关键字,如果您使用column id integer auto_increment,则结果将是名为 id 的列,其类型为整数auto_increment ,它实际上是 INTEGER 的列类型,即列的类型亲和力将是INTEGER。 Datatypes In SQLite Version 3

即。你必须准确column_name INTEGER PRIMARY KEY AUTOINCREMENT。 (案件无关紧要)

每张桌子也只能编码一次。

带有或不带INTEGER PRIMARY KEY

AUTOINCREMENT是一种特殊情况,其中命名列是 rowid 列的别名。 rowid 是唯一标识行的列,通常是隐藏的(因为需要更好的描述)。如果使用WITHOUT ROWID关键字创建表,则 rowid 将不存在。在这种情况下,无法在列定义中对AUTOINCREMENT进行编码。Clustered Indexes and the WITHOUT ROWID Optimization

说几乎可以肯定您实际上不需要代码AUTOINCREMENT只需编码column_name INTEGER PRIMARY KEY就足以满足您的需求。该列仍将被赋予唯一标识符。插入第一行的整数(64位有符号)1然后可能是2,3,4 ...... - 请注意,无法保证编号将按顺序/单调增加。

添加AUTOINCREMENT仅确保唯一标识符更大,并且这样做会限制标识符在达到最高可能值时随后会导致SQLITE_FULL异常,同时没有未使用/自由值(例如删除)可以使用低于最高值的行。

引用SQLite文档: -

  

AUTOINCREMENT关键字会占用额外的CPU,内存,磁盘空间和   磁盘I / O开销,如果不是严格需要,应该避免。它是   通常不需要。

SQLite Autoincrement