为了账号安全,请及时绑定邮箱和手机立即绑定

蟒蛇SQLite3 auto_increment适当增加,即使删除最大ID

蟒蛇SQLite3 auto_increment适当增加,即使删除最大ID

慕田峪4524236 2022-09-27 09:28:39
我开始在python中使用SQL数据库,并且我希望有多个表,我可以在其中按ID引用彼此表中的行。因此,我使用的是“testID 整数主键”列。列的值会根据需要增加,但是如果我删除具有最大 ID 的行,然后添加另一个条目,它将接收之前已设置的 ID。这很有用,因为删除最新的行会导致列中的最大ID降低,这对我来说很有意义。我现在想知道,有没有办法让数据库记住之前设置的每个ID,而不是设置相同的ID两次,即使从数据库中删除最大ID?MWE也许可以更清楚地说明这一点:conn = sqlite3.connect("db_problem.db")c = conn.cursor()with conn:    c.execute("CREATE TABLE test ("              "testID integer PRIMARY KEY, "              "col1 integer)")    c.execute("INSERT INTO test (col1) VALUES (1)")    c.execute("INSERT INTO test (col1) VALUES (2)")    c.execute("DELETE FROM test WHERE col1 LIKE 1")    c.execute("SELECT testID FROM test WHERE col1 LIKE 2")    print(c.fetchall()) # this stays 2, even tho there is only one row left, which works fine    c.execute("INSERT INTO test (col1) VALUES (3)")    c.execute("DELETE FROM test WHERE col1 LIKE 3")    c.execute("INSERT INTO test (col1) VALUES (4)")    c.execute("SELECT testID FROM test WHERE col1 LIKE 4")    print(c.fetchall()) # Here the autoincrement was set to 3 although it is the fourth entry made
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

从 SQLite 自动增量

如果“自动增量”关键字出现在“整数主键”之后,则会更改自动 ROWID 赋值算法,以防止在数据库的生存期内重用 ROWID。换句话说,自动增量的目的是防止从以前删除的行中重用 ROWID。

因此,使用以下语句创建表:

c.execute("CREATE TABLE test ("
          "testID integer PRIMARY KEY AUTOINCREMENT , "
          "col1 integer)")

但是文档中还有另一部分您必须考虑:

自动增量关键字会施加额外的 CPU、内存、磁盘空间和磁盘 I/O 开销,如果不是严格需要,则应避免使用。

选择权在您手中。


查看完整回答
反对 回复 2022-09-27
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信