- Разработка
- Бизнес
- ИТ и ПО
- Личностный рост
- Дизайн
- Маркетинг
- Красота
- Фотография и видео
- Здоровье и спорт
- Музыка
- Образование
- Подготовка к экзаменам
- Языки
- Работа на компьютере
- Строительство и ремонт
- Кулинария
- Сельское хозяйство
- Фриланс
- ПДД и вождение
- Игры
- Школьное образование
- Профессиональная ориентация
- Шитье и кожевенное дело
- Рукоделие
- Каменные и столярные работы
- Собеседование
- Рыбалка и охота
- Страны
SQL запросы. Режимы блокировки базы данных: как выполняются параллельные транзакции.
Рубрика 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);