MySQL InnoDB блокирует соединенные строки - PullRequest
11 голосов
/ 12 июля 2011

Блокирует ли "SELECT ... FOR UPDATE" соединенные строки в MySQL?

Если это так, возможно ли отключить это поведение?

В документации ничего об этом нет. Я видел, что Oracle поддерживает "SELECT ... FOR UPDATE OF table_name", где table_name - это главная таблица или одна из соединяемых таблиц, для которых затронутые строки будут заблокированы, но я никогда не видел, чтобы это упоминалось в контексте с MySQL.

Ответы [ 2 ]

6 голосов
/ 03 сентября 2012

См. эту страницу документации MySQL .В нем говорится:

Блокировка чтения, UPDATE или DELETE обычно устанавливают блокировки записи для каждой индексной записи, которая сканируется при обработке оператора SQL.Неважно, есть ли в операторе условия WHERE, исключающие строку.

и:

Для SELECT ... FOR UPDATE или SELECT ...LOCK IN SHARE MODE, блокировки получаются для отсканированных строк, и ожидается, что они будут сняты для строк, которые не соответствуют критериям включения в результирующий набор (например, если они не соответствуют критериям, указанным в предложении WHERE).Однако в некоторых случаях строки могут быть не разблокированы сразу, поскольку связь между строкой результата и ее исходным источником теряется во время выполнения запроса.

«отсканированные строки» относятся к строкам из любой таблицыкоторые используются в соединении.

0 голосов
/ 05 июня 2012

SELECT ... FOR UPDATE блокирует строки и все связанные записи индекса, так же, как если бы вы выполнили инструкцию UPDATE для этих строк.

, а затем

Если автокоммит включен, строки, соответствующие спецификации, не блокируются.

Это mySQL doc не предоставить ответы?

...