Python SQLite3 auto_increment即使在删除max ID时也会适当增加

Python SQLite3 auto_increment即使在删除max ID时也会适当增加,python,sqlite,primary-key,auto-increment,Python,Sqlite,Primary Key,Auto Increment,格代 我开始使用python中的SQL数据库,我希望有多个表,在这些表中,我可以通过ID引用彼此表中的行。因此,我使用了列“testID integer主键” 该列的值会根据需要增加,但如果我删除ID最大的行,然后添加另一个条目,它将收到之前已设置的ID。这是因为删除最近的行会导致列中的最大ID降低,这对我来说很有意义 我现在想知道,有没有一种方法可以让数据库记住之前设置的每个ID,而不是两次设置相同的ID,即使从数据库中删除了最大ID 我想说得更清楚一些: conn = sqlite3.con

格代

我开始使用python中的SQL数据库,我希望有多个表,在这些表中,我可以通过ID引用彼此表中的行。因此,我使用了列“testID integer主键”

该列的值会根据需要增加,但如果我删除ID最大的行,然后添加另一个条目,它将收到之前已设置的ID。这是因为删除最近的行会导致列中的最大ID降低,这对我来说很有意义

我现在想知道,有没有一种方法可以让数据库记住之前设置的每个ID,而不是两次设置相同的ID,即使从数据库中删除了最大ID

我想说得更清楚一些:

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
发件人:

如果AUTOINCREMENT关键字出现在INTEGER主键之后,则 更改自动ROWID分配算法以防止重用 在数据库的生存期内的rowid数。换句话说 AUTOINCREMENT的目的是防止从 以前删除的行

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

c.execute("CREATE TABLE test ("
          "testID integer PRIMARY KEY AUTOINCREMENT , "
          "col1 integer)")
但您必须考虑文件的另一部分:

AUTOINCREMENT关键字会增加CPU、内存、磁盘空间和内存 磁盘I/O开销,如果不严格需要,应避免


这是你的选择。

事实上,我的数据库搞混了,第一个条目就涵盖了这一点。