В консоли sqlite3
:
sqlite>
CREATE TABLE items (id PRIMARY KEY);
BEGIN;
SELECT * FROM items;
INSERT INTO items VALUES(78);
sqlite> _
А потом во второй консоли:
sqlite>
.timeout 10000;
BEGIN;
SELECT * FROM items;
INSERT INTO items VALUES(78);
Error: database is locked
sqlite> _
«База данных заблокирована» - ошибка происходит мгновенно, что не может быть правильным, верно?
Если я опущу SELECT во второй консоли, обработчик занятости будет ждать 10 секунд при установке INSERT. Я обнаружил, что использование BEGIN EXCLUSIVE
также заставляет вторую транзакцию ждать 10 секунд, но затем в BEGIN-операторе. (К которому я решил как обходной путь.)
Мой вопрос: это ошибка или так и должно быть? Если это ожидаемое поведение, то почему?
Спасибо!
(SQLite v3.7.6)