【问题标题】:SQite - AUTO INCREMENT does not workSQlite - 自动增量不起作用
【发布时间】:2018-03-16 10:05:25
【问题描述】:

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

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

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

如果有人有想法。

【问题讨论】:

  • 你能发布sqlite查询吗?
  • 你能用 auto_increment 创建一个表吗? afaik,它应该是 AUTOINCREMENT
  • "doesn't work" 是含糊其辞让任何人帮你。

标签: sql datetime sqlite


【解决方案1】:

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

auto_increment 不是有效关键字,如果您使用 column id integer auto_increment,结果将是一个名为 id 的列,其类型为 integer 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

【讨论】:

    猜你喜欢
    • 2013-05-25
    • 2015-08-06
    • 2021-11-26
    • 1970-01-01
    • 2017-12-30
    • 2013-10-13
    • 2015-11-22
    • 2023-03-21
    • 2017-03-09
    相关资源
    最近更新 更多