Spec-Zone .ru
спецификации, руководства, описания, API

14.2.3.7. Набор блокировок Различными SQL-операторами в InnoDB

Блокировка читала, UPDATE, или a DELETE обычно запись набора соединяет каждый индексировала запись, которая сканируется в обработке SQL-оператора. Не имеет значения, есть ли WHERE условия в операторе, который исключил бы строку. InnoDB не помнит точное WHERE условие, но только знает, которые индексируют диапазоны, были отсканированы. Блокировки обычно являются следующими блокировками ключа, которые также блокируют, сразу вставляет в "разрыв" перед записью. Однако, блокировка разрыва может быть отключена явно, который заставляет блокировку следующего ключа не использоваться. Для получения дополнительной информации см. Раздел 14.2.3.5,"InnoDB Запись, Разрыв, и Следующие блокировки ключа". Уровень изоляции транзакции также может влиять, какие блокировки устанавливаются; см. Раздел 13.3.6,"SET TRANSACTION Синтаксис".

Если вторичное устройство индексирует, используется в поиске, и индексируйте блокировки записи, которые будут установлены, монопольные, InnoDB также получает соответствующие записи кластерного индекса, и наборы соединяет их.

Различия между коллективными и монопольными блокировками описываются в Разделе 14.2.3.2,"InnoDB Режимы блокировки".

Если Вы имеете, не индексирует подходящий для Вашего оператора, и MySQL должен отсканировать всю таблицу, чтобы обработать оператор, каждая строка таблицы становится заблокированной, который поочередно блокирует всех, вставляет другими пользователями к таблице. Важно создать хороший, индексирует так, чтобы Ваши запросы излишне не отсканировали много строк.

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

InnoDB определенные типы наборов блокировок следующим образом.