Gday,
Я начинаю работать с базой данных SQL в python и хочу иметь несколько таблиц, где я могу ссылаться на строки в таблице друг друга по идентификатору. Поэтому я использую столбец «testID integer PRIMARY KEY».
Значение столбца увеличивается по желанию, но если я удаляю строку с максимальным идентификатором, а затем добавляю другую запись, он получит идентификатор который был установлен уже раньше. Это работает, потому что удаление самой последней строки приводит к более низкому максимальному идентификатору в столбце, что имеет смысл для меня.
Мне было интересно, есть ли способ, чтобы база данных запоминала каждый идентификатор, который был установлен ранее и не устанавливать один и тот же идентификатор дважды, даже если максимальный идентификатор удален из базы данных?
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