Я вставляю данные в базу данных, где каждая «партия» должна иметь новый уникальный идентификатор для самой партии. Я мог бы добавить таблицу пакетов и использовать его идентификатор 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")
, идея в том, что выбор теперь явно является частью обновления?