我有一个包含数据的表TABLE1。另一个干净的表TABLE2如下:
"TABLE2"(ipt TEXT,instant NUM, id integer auto_increment);
我想在TABLE1中选择IP和instant并将其插入TABLE2但我不知道为什么auto_increment不起作用。
如果有人有想法。
答案 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开销,如果不是严格需要,应该避免。它是 通常不需要。