Обязательно ли разблокировать таблицу после коммита при блокировке на уровне строк? - PullRequest
0 голосов
/ 14 января 2019

Я пишу код, который использует блокировку на уровне строк с MySQL (innodb backend).

Псевдокод:

START TRANSACTION
SELECT * FROM foo WHERE foocondition FOR UPDATE
UPDATE foo set bar=value WHERE foocondition
COMMIT

Я не могу найти в документации по mysql информацию о блокировках, удерживаемых ПОСЛЕ фиксации.

Должен ли я выполнять «UNLOCK TABLES» после COMMIT или это неявно? Ответ должен быть «НЕТ», но я хотел бы получить отзыв об этом.

1 Ответ

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

UNLOCK TABLES не имеет ничего общего с блокировками чтения, которые вы используете в своем примере. Вы используете UNLOCK TABLES, когда ранее заблокировали таблицу командой LOCK TABLES. Даже если вы используете блокировку чтения для установки блокировки диапазона, чтобы никто не мог ВСТАВИТЬ новые строки в таблицу, сама таблица не блокируется.

Блокировки, установленные блокировкой, читаемой как SELECT ... FOR UPDATE, и операторы DML, такие как UPDATE ... WHERE, освобождаются автоматически при завершении транзакции.

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