Блокировки в InnoDB (шпаргалка)

в 8:51, , рубрики: innodb, mysql, блокировки, метки: , ,

Решил разобраться в вопросе блокировок в InnoDB. Получилась такая вот краткая шпаргалка. Может кому пригодится. Буду благодарен сообществу за найденные неточности

И так, в пределах одной транзакции, после…

UPDATE… WHERE

SELECT… WHERE выполняется без блокировки (кроме чтений в режиме изоляции SERIALIZABLE)
SELECT… LOCK IN SHARE MODE ждет освобождение блокировки
SELECT… FOR UPDATE ждет освобождение блокировки
UPDATE и DELETE ждет освобождение блокировки

Если UPDATE… WHERE выполнился в режиме изоляции REPEATABLE READ или SERIALIZABLE и строки выбирались не по уникальному ключу, то блокируются также INSERT в этот ключ (так называемый NEXT-KEY LOCK), но при READ COMMITTED и READ UNCOMMITTED такой блокировки не происходит

DELETE FROM… WHERE

Так же как и для UPDATE… WHERE

SELECT… WHERE

Во всех режимах изоляции кроме SERIALIZABLE

Остальные потоки могут читать и писать/удалять
INSERT блокируется так же как и в UPDATE… WHERE

При REPEATABLE READ чтение «заносится в буфер» и все последующие обращение возвращают одинаковый результат
При READ COMMITED и READ UNCOMMITTED каждый запрос возвращает свежий результат (после завершения транзакции другим потоком)

В режиме изоляции SERIALIZABLE

Остальные потоки могут только читать (кроме чтений SELECT… FOR UPDATE)
UPDATE и DELETE ждет освобождение блокировки
INSERT блокируется так же как и в UPDATE… WHERE

При REPEATABLE READ чтение «заносится в буфер» и все последующие обращение возвращают одинаковый результат
При READ COMMITED и READ UNCOMMITTED каждый запрос возвращает свежий результат

SELECT… LOCK IN SHARE MODE

Остальные потоки могут только читать
UPDATE и DELETE ждет освобождение блокировки
INSERT блокируется так же как и в UPDATE… WHERE

SELECT… FOR UPDATE

SELECT… WHERE могут читать (кроме чтений в режиме изоляции SERIALIZABLE)
SELECT… LOCK IN SHARE MODE и SELECT… FOR UPDATE ждут освобождения блокировки
UPDATE и DELETE ждет освобождение блокировки
INSERT блокируется так же как и в UPDATE… WHERE

Автор: zim32

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js