Следующий

SQL запросы. Режимы блокировки базы данных: как выполняются параллельные транзакции.

7 Просмотры· 06/18/20
Кирилл Антонов
Кирилл Антонов
Подписчики
0

Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-m...
Текстовая версия: http://zametkinapolyah.ru/zame....tki-o-mysql/tema-15-
Паблик блога в ВК: 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);

Показать больше

 0 Комментарии sort   Сортировать


Следующий