'metadatalock' произошел, когда я 'заблокировал таблицы [table_name] write' - PullRequest
0 голосов
/ 23 января 2019

Я сделал это, как показано ниже

-- connection 1
START TRANSACTION;
LOCK TABLES [table_name] WRITE;

-- connection 2
START TRANSACTION;
SELECT * FROM [table_name]; -- waiting for table metadata lock

Я не понимаю вышеописанную ситуацию.
Я думал, WRITE LOCK не препятствует выполнению запроса SELECT.

Когда я сделал, как показано ниже,

-- connection 1
START TRANSACTION;
UPDATE [table_name] SET [column = value] WHERE id = 1;

-- connection 2
START TRANSACTION;
SELECT * FROM [table_name] WHERE id = 1; -- doesn't wait

SELECT не ждет, как вы видели.
И я подумал, что WRITE LOCK также работает как предложение UPDATE.
Но похожекак нет ..

Теперь я знаю, что-то не так?

1 Ответ

0 голосов
/ 23 января 2019

Блокировка записи не работает как блокировка на уровне строк.

https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html говорит:

WRITE блокировка:

  • Только сеанс, который удерживает блокировку, может получить доступ к таблице.Никакой другой сеанс не может получить к нему доступ, пока не будет снята блокировка.

«Доступ» в этом контексте означает чтение или запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...