SQL запросы. Режимы блокировки базы данных: как выполняются параллельные транзакции.
Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-m…
Текстовая версия: http://zametkinapolyah.ru/zametki-o-mysql/tema-15-tranzakcii-v-sql-na-primere-bazy-dannyx-sqlite-svojstva-acid-i-urovni-izolyacii-tranzakcij-v-sqlite3.html
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd
Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223
sqlite3 block.db3
— Создадим таблицу и наполним ее
CREATE TABLE table1(a,b,c,d);
INSERT INTO table1 VALUES (1,2,3,4);
INSERT INTO table1 VALUES (5,6,7,8);
INSERT INTO table1 VALUES (9,10,11,12);
INSERT INTO table1 VALUES (13,14,15,16);
INSERT INTO table1 VALUES (17,18,19,20);
INSERT INTO table1 VALUES (21,22,23,24);
INSERT INTO table1 VALUES (25,26,27,28);
SELECT * FROM table1;
— для примера запустим второй терминал и откроем нашу БД
sqlite3
.open block.db3
— DEFERRED – данный режим блокировки является режимом по умолчанию в SQLite. В режиме DEFERRED SQLite начинает блокировать таблицы только после того, как будет начато выполнение какой-либо команды, при этом другие транзакции могут читать данные из таблицы, но не могут их изменять.
— терминал 1
BEGIN DEFERRED TRANSACTION;
— терминал 2
SELECT * FROM table1;
INSERT INTO table1 VALUES (33,34,35,36);
— терминал 1
INSERT INTO table1 VALUES (29,30,31,32);
SELECT * FROM table1;
— терминал 2
SELECT * FROM table1;
INSERT INTO table1 VALUES (33,34,35,36);
— терминал 1
COMMIT;
SELECT * FROM table1;
— терминал 2
SELECT * FROM table1;
INSERT INTO table1 VALUES (33,34,35,36);
—————————————————————-
— IMMEDIATE – в данном режим происходит блокировка базы данных, как только будет выполнена команда BEGIN. При это режим IMMEDIATE в SQLIte допускает, что другие транзакции могут читать данные из базы данных, но не записывать.
— терминал 1
BEGIN IMMEDIATE TRANSACTION;
— терминал 2
SELECT * FROM table1;
INSERT INTO table1 VALUES (37,38,39,40);
— терминал 1
INSERT INTO table1 VALUES (41,42,43,44);
SELECT * FROM table1;
— терминал 2
SELECT * FROM table1;
INSERT INTO table1 VALUES (45,46,47,49);
— терминал 1
COMMIT;
SELECT * FROM table1;
— терминал 2
SELECT * FROM table1;
INSERT INTO table1 VALUES (50,51,51,52);
——————————————————————-
— EXCLUSIVE – самый высокий уровень блокировки базы данных в SQLite. Режим EXCLUSIVE блокирует базу данных при выполнении команды BEGIN и при этом другие транзакции не могут ни читать данные из базы данных, ни уж тем более изменять данные.
— терминал 1
BEGIN EXCLUSIVE TRANSACTION;
— терминал 2
SELECT * FROM table1;
INSERT INTO table1 VALUES (53,54,55,56);
— терминал 1
SELECT * FROM table1;
INSERT INTO table1 VALUES (53,54,55,56);
Последние сообщения
127 полезных и бесплатных онлайн академий
24.04.2019