Установите начальное значение для AUTOINCREMENT в SQLite - PullRequest
51 голосов
/ 28 марта 2009

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

Ответы [ 5 ]

89 голосов
/ 28 марта 2009

С веб-сайта SQLite :

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

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

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

Где n + 1 - следующий требуемый ROWID, а table - имя таблицы.

24 голосов
/ 28 марта 2009

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

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

17 голосов
/ 13 октября 2014

Я использую приведенный ниже запрос, который решает проблему, когда 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;
6 голосов
/ 28 марта 2009

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

4 голосов
/ 29 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...