MySQL блокировка и операторы, которые блокируют строки, используя уникальный индекс - PullRequest
0 голосов
/ 31 октября 2018

В документе MySQL 14.6.1 InnoDB Locking «Gap Locks» раздел, как говорится

Gap-блокировка не требуется для операторов, которые блокируют строки, используя уникальные Индекс для поиска уникальной строки. ... Например, если столбец id имеет уникальный индекс, следующий оператор использует только Блокировка индексной записи для строки, имеющей значение идентификатора 100 и ...

SELECT * FROM child WHERE id = 100;

Если id не проиндексирован или имеет неуникальный индекс, оператор блокирует предыдущий пробел .

Однако в последующей части 14.6.3 Блокировки, установленные различными операторами SQL в InnoDB , говорят

SELECT ... FROM - это согласованное чтение, считывание снимка базы данных и установка без блокировок , если уровень изоляции транзакции не установлен в SERIALIZABLE.

Похоже, что последний (без блокировок) конфликтует с первым (нужна блокировка записи или пробела).

Я что-то не так понял?

1 Ответ

0 голосов
/ 31 октября 2018

Нет. Здесь нет противоречия. В последнем утверждении говорится, что SELECT ... FROM ничего не блокирует, потому что это предложение SELECT без WHERE. Кроме того, в первом случае речь идет об очень специфической блокировке, которая предотвращает только ВСТАВКУ записей с конкретными значениями ключа («блокировка пробела»).

...