Вопросы | sqlite

Могут ли разные соединения одной и той же базы данных sqlites начинать транзакции одновременно?

Вопрос

user26404 | 12186 просмотров | рейтинг: 5

Я встретил странную проблему с sqlite3. Я получил разные соединения одного и того же файла базы данных, используя метод open (). соединение 1 начинает транзакцию, а соединение 2 начинает другую транзакцию, которая заключается в обновлении нескольких записей таблицы. Затем соединение 1 фиксирует транзакцию, затем соединение 2 фиксирует транзакцию. Но я обнаружил, что команда обновления соединения 2 никогда не обновляет запись в базе данных. Не исключение, выброшенное во время этой процедуры. Я не знаю, почему проблема возникает. Кто-нибудь может объяснить мне причину?



Ответы

rustyshelf

+ 14 -
Если вы прочтете документацию по SQLite, вы увидите, что она поддерживает несколько подключений только для чтения, вы не можете выполнять запись в базу данных из нескольких подключений, поскольку она не предназначена для этого. http://www.sqlite.org/faq.html#q5  


Doug Currie

+ 5 -
Если вы не используете BEGIN IMMEDIATE для инициирования транзакций, вы рискуете откатить и повторить их. НАЧАЛО не делает никакой блокировки; последующие UPDATE или INSERT получают блокировку, и вам нужно проверить код результата, чтобы увидеть, не сработали ли они. Смотрите эту страницу о транзакциях и эту страницу о замках.


Теги

sqlite | transactions