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);

ПРИСОЕДИНЯЙТЕСЬ
Поделиться

Кирилл Антонов

Канал для начинающего веб-разработчика. Здесь ты найдешь различные видео уроки о технологиях и программном обеспечение, которые используют веб-разработчики.



Обсуждение закрыто.