代码之家  ›  专栏  ›  技术社区  ›  Christian Davén

在sqlite中设置自动增量的起始值

  •  47
  • Christian Davén  · 技术社区  · 15 年前

    如何在sqlite中设置autoincrement字段的起始值?

    5 回复  |  直到 15 年前
        1
  •  20
  •   dave mankoff    7 年前

    显式插入 value-1 进入表格,然后删除该行。

    编辑:下一条评论,讨论编辑 SQLITE_SEQUENCE 直接使用表格可能更好: https://stackoverflow.com/a/692871/10093

        2
  •  80
  •   CL.    9 年前

    SQLite web site :

    sqlite使用特殊的 SQLITE_SEQUENCE 表。这个 平方列序列 只要创建了一个包含autoincrement列的普通表,就会自动创建和初始化表。的内容 平方列序列 可以使用普通的update、insert和delete语句修改表。 但是,对这个表进行修改可能会干扰自动增量密钥生成算法。在进行这些改变之前,确保你知道你在做什么。

    我试过了,它起作用了:

    UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = '<table>'
    

    在哪里? n +1是您想要的下一个rowid,并且 桌子 是表名。

        3
  •  12
  •   iTech    10 年前

    我使用下面的查询来解决当sqlite_序列没有表的记录(即第一条记录尚未添加到表中)时的问题,否则它将更新序列。

    BEGIN TRANSACTION;
    
    UPDATE sqlite_sequence SET seq = <n> WHERE name = '<table>';
    
    INSERT INTO sqlite_sequence (name,seq) SELECT '<table>', <n> WHERE NOT EXISTS 
               (SELECT changes() AS change FROM sqlite_sequence WHERE change <> 0);
    COMMIT;
    
        4
  •  6
  •   jle    15 年前

    一种方法是插入第一行 显式指定要以其开头的行ID . 然后,sqlite将插入高于前一个最高值的行ID。

        5
  •  4
  •   Raivo Laanemets    12 年前

    在使用sqlite_sequence表的解决方案中,似乎是在添加了第一个插入到带有autoincrement列的表中之后添加了这个表中的条目。在某些情况下,这可能会导致问题(即自动增量仍然从1开始,而不是从期望值开始)。