Рассмотрим пример работы блокировки строк, для этого создаем таблицу и сразу заполняем данными её:
Откроем первое окно командной строки.
Ctrl+Alt+T
Создадим в первом окне новую базу данных:
CREATE TABLE table1 (
a INT NOT NULL,
b INT NOT NULL ,
c INT NOT NULL ,
d INT NOT NULL);
INSERT INTO table1 (a,b,c,d) VALUES (1,2,3,4);
INSERT INTO table1 (a,b,c,d) VALUES (5,6,7,8);
INSERT INTO table1(a,b,c,d) VALUES (9,10,11,12);
INSERT INTO table1 (a,b,c,d) VALUES (13,14,15,16);
INSERT INTO table1 (a,b,c,d) VALUES (17,18,19,20);
INSERT INTO table1 (a,b,c,d) VALUES (21,22,23,24);
INSERT INTO table1 (a,b,c,d) VALUES (25,26,27,28);
SELECT * FROM table1;
Теперь откроем в первом окне транзакцию (с режимом блокировки DEFFERED):
BEGIN DEFFERED TRANSACTION;
Теперь откроем второе окно командной строки. И обратимся к этой же базе данных:
Ctrl+Alt+T
USE table1;
SELECT * FROM table1;
Мы можем увидеть, что параллельный, второй сеанс обращения к базе данных позволяет читать данные. Теперь попробуем вставить данные из второго окна:
INSERT INTO table1 (a,b,c,d) VALUES (1,234,34,45);
Видим, что можем из второго окна вставлять данные.
Теперь в первом окне выведем данные таблицы:
SELECT * FROM table1;
После чего во втором окне обращаемся к базе данных:
INSERT INTO table1 (a,b,c,d) VALUES (31,6,2, 8);
Видим, что во втором окне появилась ошибка:
Error: databse is locked
Это и есть пример блокировки строк в параллельном запросе.
fgh
Fri, 01/22/2021 - 21:58
Permalink
Блокировки строк в базах данных (параллельные транзакции)
Рассмотрим пример работы блокировки строк, для этого создаем таблицу и сразу заполняем данными её:
Откроем первое окно командной строки.
Создадим в первом окне новую базу данных:
Теперь откроем в первом окне транзакцию (с режимом блокировки DEFFERED):
Теперь откроем второе окно командной строки. И обратимся к этой же базе данных:
Мы можем увидеть, что параллельный, второй сеанс обращения к базе данных позволяет читать данные. Теперь попробуем вставить данные из второго окна:
Видим, что можем из второго окна вставлять данные.
Теперь в первом окне выведем данные таблицы:
После чего во втором окне обращаемся к базе данных:
Видим, что во втором окне появилась ошибка:
Это и есть пример блокировки строк в параллельном запросе.
Источники:
1) mysql deadlocks & lock wait timeouts -- что означают. Блокировки и транзакции
2) Блокировки в MySQL
3) SQL запросы. Режимы блокировки базы данных: как выполняются параллельные транзакции.
4) 6.7.2 Синтаксис команд LOCK TABLES/UNLOCK TABLES
5 ) На английском (Optimizing Locking Operations)
Чем отличается параллельность, от конкурентности и так далее (на английском)