Установить начальное значение для автоинкремента в SQLite

Как установить начальное значение для поля AUTOINCREMENT в SQLite?

5 ответов


явно вставить value-1 в таблицу, затем удалите строку.

Edit: следующий комментарий вниз, в котором обсуждается редактирование SQLITE_SEQUENCE таблица напрямую, вероятно, предпочтительнее:https://stackoverflow.com/a/692871/10093


С SQLite web site:

SQLite отслеживает самый большой ROWID, который когда-либо проводилась таблица с помощью специального SQLITE_SEQUENCE таблица. The SQLITE_SEQUENCE таблица создается и инициализируется автоматически при создании обычной таблицы, содержащей столбец автоинкремента. Содержание SQLITE_SEQUENCE таблицу можно изменить с помощью обычных инструкций UPDATE, INSERT и DELETE. но внесение изменений в эту таблицу, вероятно, нарушит Алгоритм генерации ключа автоинкремента. Убедитесь, что вы знаете, что вы делаете, прежде чем предпринимать такие изменения.

Я пробовал это, и это работает:

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

здесь n+1 следующий ROWID вы хотите и стол - имя таблицы.


Я использую приведенный ниже запрос, который решает проблему, когда sqlite_sequence не имеет записи для таблицы (т. е. первая запись еще не была добавлена в таблицу), иначе она обновляет последовательность.

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;

один из способов сделать это-вставить первую строку явное указание идентификатора строки, который вы хотите начать с. Затем SQLite вставит идентификаторы строк, которые выше предыдущего самого высокого.


в решении с таблицей SQLITE_SEQUENCE запись в эту таблицу, кажется, добавляется после первой вставки в таблицу с добавлением столбца autoincrement. В некоторых случаях это может привести к неприятностям (i.e автоинкремент по-прежнему начинается с 1, а не с желаемого значения).