Удалили последнюю запись, а новая получила её старый номер
В учебной базе ИИ использовал INTEGER PRIMARY KEY и предположил, что автоматически выданный номер никогда не повторится в истории. Он уникален среди существующих строк, но это ещё не договорённость о всей истории после удаления. Маленькая база в памяти позволяет увидеть различие.
Небольшая проверка
import sqlite3
connection = sqlite3.connect(':memory:')
connection.executescript(
"CREATE TABLE plain(id INTEGER PRIMARY KEY, note TEXT);"
"CREATE TABLE historical(id INTEGER PRIMARY KEY AUTOINCREMENT, note TEXT);"
"INSERT INTO plain(note) VALUES('first'),('second');"
"INSERT INTO historical(note) VALUES('first'),('second');"
"DELETE FROM plain WHERE id=2;DELETE FROM historical WHERE id=2;"
)
plain_id = connection.execute("INSERT INTO plain(note) VALUES('new')").lastrowid
historical_id = connection.execute("INSERT INTO historical(note) VALUES('new')").lastrowid
assert plain_id == 2
assert historical_id == 3
print(plain_id, historical_id)
connection.close()
В первом варианте свободный номер максимальной удалённой строки использован снова. Во втором показанный AUTOINCREMENT изменил правило автоматической выдачи. Это сравнение двух явно созданных учебных таблиц. Из результата не следует, что все обычные номера повторяются, или что автоматическая нумерация обязана идти без пропусков.
Что задать помощнику до приёмки
Спроси, где будет жить идентификатор: только внутри текущей таблицы или ещё во внешнем журнале с уже удалёнными объектами. Для второй задачи отдельно согласуй свойство отсутствия повторного использования. Затем проверь создание, удаление и новое создание. Выбор AUTOINCREMENT не нужно делать механически: у него есть дополнительные издержки, а постоянная идентичность между несколькими базами требует иных договорённостей.
Никакая рабочая база не открывалась; таблицы существовали только в памяти и соединение закрыто. Код не предлагается как миграция. Он проверяет автоматическую выдачу номера в конкретном простом сценарии, а не правила ручного задания ID, восстановления, распределённой генерации или отменённых транзакций.
Это учебный синтетический пример, подготовленный с помощью ИИ. Показанный код выполнен локально на вымышленных данных; реальные клиентские файлы и внешние сервисы не менялись.
Первоисточник: https://www.sqlite.org/autoinc.html
Разборы новостей и инструментов ИИ — в Jarvis News: https://t.me/jarvis_and_news



