Как установить начальное значение для поля AUTOINCREMENT в SQLite?Установить начальное значение для AUTOINCREMENT в SQLite
ответ
Явно вставьте value-1
в таблицу, а затем удалите строку.
Edit: следующий комментарий вниз, в котором обсуждается редактирование SQLITE_SEQUENCE
таблицы непосредственно, вероятно, предпочтительнее: https://stackoverflow.com/a/692871/10093
Один из способов сделать это, чтобы вставить первую строку , указав явно идентификатор строки вы хотите начать с , Затем SQLite вставляет идентификаторы строк, которые выше предыдущего.
От SQLite web site:
SQLite отслеживает крупнейшие ROWID'ый, таблица была когда-либо проводившееся с помощью специальной
SQLITE_SEQUENCE
таблицы. ТаблицаSQLITE_SEQUENCE
создается и инициализируется автоматически, когда создается нормальная таблица, содержащая столбец AUTOINCREMENT. Содержимое таблицыSQLITE_SEQUENCE
может быть изменено с использованием обычных операторов UPDATE, INSERT и DELETE. Но внесение изменений в эту таблицу, вероятно, нарушит алгоритм генерации ключа AUTOINCREMENT. Убедитесь, что вы знаете, что делаете, прежде чем предпринимать такие изменения.
Я попробовал это, и это работает:
UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = '<table>'
Где п +1 это следующий ROWID вы хотите и таблица это имя таблицы.
Не уверен, так как я не уверен, как работают внутренние элементы sqlite. Стоит отметить, что jle и мои предложения, приведенные выше, - это то, как библиотека PHP MDB2 поддерживает изменение идентификатора. Взгляните на их источник драйверов sqlite: http://cvs.php.net/viewvc.cgi/pear/MDB2/MDB2/Driver/sqlite.php?view=markup –
Целостность не проблема (я думаю, не эксперт или что-то еще).Проблема, о которой я думаю, что они предупреждают о том, что вы удаляете строку с идентификатором меньше MAX (ID) и пытаетесь автоматически установить автоинкремент вручную. Вы будете застревать после первой вставленной строки из-за нарушения первичного ключа. – Assimilater
Точный алгоритм документирован на связанной странице и не будет изменен ни в какой версии 3.x, чтобы сохранить совместимость. –
В решении с таблицей SQLITE_SEQUENCE запись в эту таблицу добавляется после добавления первой вставки в таблицу с добавлением столбца автоинкремента. В некоторых случаях это может вызвать проблемы (например, автоинкремент все же начинается с 1, а не из желаемого значения).
Я использую следующий запрос, который решает проблему, когда 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;
Это единственно верное решение. Изменения в вуду делают мои глаза водой, хотя;) – w00t
Теперь я использовал это как мое решение:
REPLACE INTO sqlite_sequence (name, seq) VALUES ('<table>', <n>)
Эта работа для меня. Спасибо за ответ выше.
- 1. Установить начальное значение для столбца с AUTOINCREMENT
- 2. Установка SQLAlchemy Autoincrement начальное значение
- 3. Получить Значение AutoIncrement Колонка Sqlite
- 4. Sqlite Autoincrement
- 5. Установить начальное значение объекта
- 6. Установить начальное значение для местоположения в Android
- 7. sqlite autoincrement function
- 8. Sequelize autoIncrement и SQLite
- 9. ID SQLite не Autoincrement
- 10. WF8 & C# & SQLite & autoincrement & Fail
- 11. Как установить начальное значение для столбца, который является автоинкрементным в android sqlite
- 12. Проблемы с Autoincrement в SQLite
- 13. Swift - Как установить начальное значение для NSUserDefaults
- 14. Установить начальное значение для свойства модели?
- 15. Установить начальное значение модели для угловой директивы
- 16. UISlider, как установить начальное значение
- 17. Установить начальное значение для загрузочного буфера datetimepicker
- 18. Установить начальное значение флажка динамически
- 19. Как установить начальное значение генератора?
- 20. Как установить начальное значение quicksearch?
- 21. Как установить начальное значение в директиве собственности
- 22. SQLite: Autoincrement первичные ключевые вопросы
- 23. как установить начальное значение поля первичного ключа автоинкремента в Liquibase
- 24. SQlite AUTOINCREMENT с Заявление Binding
- 25. Установить начальное значение автоинкремента в Laravel 4
- 26. Установить начальное значение в datepicker с jquery?
- 27. Как установить начальное наблюдаемое значение в Angularjs2?
- 28. Как установить начальное значение в реакции?
- 29. Установить начальное значение в ASP: DropDown
- 30. Начальное значение empty_form для modelformset_factory
Я полагаю, что это лучший способ сделать это, но это некрасиво. –
Это не работает для меня. Если у меня есть таблица «Пользователи» с только 1 записью (id 1), в то время как автоинкремент равен 3, тогда другой пользователь вставлен с идентификатором -1, затем удаляется, следующий вставленный пользователь все еще id 4 (расширение администратора SQLite для Firefox , если это имеет значение) – Assimilater
кажется обходным путем. я предпочитаю обращаться к записи таблицы sqlite_sequence для рассматриваемой таблицы. –