Установить начальное значение для автоинкремента в SQLite
Как установить начальное значение для поля AUTOINCREMENT в SQLite?
5 ответов
явно вставить value-1
в таблицу, затем удалите строку.
Edit: следующий комментарий вниз, в котором обсуждается редактирование SQLITE_SEQUENCE
таблица напрямую, вероятно, предпочтительнее:https://stackoverflow.com/a/692871/10093
SQLite отслеживает самый большой ROWID, который когда-либо проводилась таблица с помощью специального
SQLITE_SEQUENCE
таблица. TheSQLITE_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, а не с желаемого значения).