Почему происходит запись данных в таблицу из другой сессии, несмотря на то, что я установил блокировку чтения для таблицы?

252
22 июля 2021, 10:30

У меня есть таблица t, которая содержит два столбца: name VARCHAR(20) NOT NULL, surname VARCHAR(20) NOT NULL

Я установил блокировку чтения в первой сессии с помощью следующего кода:

LOCK TABLE t READ;

Я попробовал записать данные вот так:

INSERT INTO t(name, surname) VALUES('Stan', 'Collins');

И сгенерировалась ошибка, в которой сказано, что таблица t была заблочена с помощью READ лока и не может быть обновлена. Все ок, так и должно быть.

Я перезашел в MySQL и попытался ввести данные в таблицу во второй раз, набрав код и по какой-то причине он заработал. Как я узнал из этой статьи https://www.mysqltutorial.org/mysql-table-locking/ когда READ лок установлен, сессия которая активировала его и остальные сессии могут читать, но не могут записывать данные в таблицу.

Так почему же данные были записаны в таблицу во второй сессии, несмотря на то, что я установил READ лок в первой сессии?

Answer 1

Из-за пере захода в MySQL READ LOCK был сброшен. Поэтому во второй сессии данные записываются в таблицу. Если же не выходить из MySQL, а запустить вторую сессию параллельно с первой, то данные не запиутся, MySQL перейдет в режим ожидания и будет находиться в нём пока не будет сброшен READ LOCK в первой сессии. Будь то явный сброс (через команду UNLOCK TABLES) или завершение сессии.

READ ALSO
yii2 запрос INNER JOIN c массивом значений

yii2 запрос INNER JOIN c массивом значений

Есть таблица с квартирами и у каждой квартиры есть удобстваУдобства разные и разное количество их

207
Отследить все запросы к базе MySQL

Отследить все запросы к базе MySQL

Суть проблемы: есть скрипт огромный, написанный мною, но использующий множество функционала из фремворка CMS(prestashop)Сам по себе процесс работы...

411
Как подключиться к сети TOR без прокси?

Как подключиться к сети TOR без прокси?

Надо спарситьonion сайт, но используя curl и другие похожие посты ничего не выходит

212
Одинарная кавычка в текстовом поле php

Одинарная кавычка в текстовом поле php

Есть текстовое поле с именем nicknameИз него значение передается в базу данных

252