2017-01-07 4 views
0

Я вставляю данные в базу данных, где каждая «партия» должна иметь новый уникальный идентификатор для самой партии. Я мог бы добавить таблицу пакетов и использовать его идентификатор AUTOINCREMENT, но мне это действительно не нужно ни для чего другого, поэтому кажется чрезмерным.Как обновить отложенную транзакцию SQLite до RESERVED

Я сейчас делаю SELECT MAX (batchid) + 1 FROM элементов, а затем использовать его для вставки, это, конечно, склонны к гонке-условия (2 новые партии могут одновременно получить конфликтующие идентификаторы)

Использование НЕМЕДЛЕННАЯ транзакция нецелесообразна. Возможно ли принудительное обновление транзакции DEFERRED до EXCLUSIVE, прежде чем делать выбор?

Некоторые идеи;

  • Могу ли я сделать кое-что дешевое обновление?
  • Некоторая явная инструкция, чтобы теперь перейти эксклюзивно?
  • INSERT INTO items (batchid, value) VALUES ((SELECT MAX(batchid)+1 FROM items), "monkey"), ((SELECT MAX(batchid)+1 FROM items), "banana"), идея в том, что выбор теперь явно является частью обновления?

ответ

1

Действительно, можно было бы поместить поиск идентификатора партии в подзапрос, но это было бы много дублирования.

Самый простой способ - сделать что-то для записи в базу данных, например PRAGMA user_version = x.

 Смежные вопросы

  • Нет связанных вопросов^_^