|
Справочное руководство по MySQL7.5.8.4 Блокировка, осуществляемая различными операторами SQL в InnoDB
7.5.8.4 Блокировка, осуществляемая различными операторами SQL в InnoDB
-
SELECT ... FROM ... : согласованное чтение, которое производится из
образа базы данных без блокировки.
-
SELECT ... FROM ... LOCK IN SHARE MODE : устанавливает совместно
используемую блокировку следующего ключа на все считываемые индексные
записи.
-
SELECT ... FROM ... FOR UPDATE : устанавливает эксклюзивную блокировку
следующего ключа на все считываемые индексные записи.
-
INSERT INTO ... VALUES (...) : устанавливает эксклюзивную блокировку
на вставленную строку. Обратите внимание, что эта блокировка не
является блокировкой следующего ключа и не предотвращает вставку
другими пользователями записей в интервал перед вставленной строкой.
Если произойдет ошибка дублирующегося ключа, оператор устанавливает
блокировку совместного доступа на запись дублирующегося индекса.
-
INSERT INTO T SELECT ... FROM S WHERE ... устанавливает эксклюзивную
(не следующего ключа) блокировку на каждую вставляемую в T строку.
Осуществляет поиск по S как согласованное чтение, но устанавливает
блокировки совместного доступа к следующему ключу на S , если включено
ведение журнала MySQL. InnoDB в последнем случае должен устанавливать
блокировки, так как при восстановлении работоспособности системы с
повтором всех завершенных транзакций из резервной копии все операторы
SQL должны запускаться точно таким же образом, как и изначально.
-
CREATE TABLE ... SELECT ... выполняет операцию SELECT как
согласованное чтение или совместную блокировку, как и в предыдущем
пункте.
-
REPLACE осуществляется так же, как и вставка, если нет конфликтов
уникальных ключей. В противном случае эксклюзивная блокировка
следующего ключа будет установлена на строку, которая должна быть
обновлена.
-
UPDATE ... SET ... WHERE ... : устанавливает эксклюзивную блокировку
следующего ключа для каждой записи, по которой производится поиск.
-
DELETE FROM ... WHERE ... : устанавливает эксклюзивную блокировку
следующего ключа для каждой записи, по которой производится поиск.
-
Если для таблицы определены ограничения
FOREIGN KEY , для любой
вставки, обновления или удаления, для которых требуется проверка
условий ограничения, устанавливается совместная блокировка на уровне
записей, которые просматриваются для проверки ограничения. В InnoDB
эти блокировки устанавливаются также в случае нарушения ограничения.
-
LOCK TABLES ... : устанавливает блокировку таблицы. Эта блокировка
производится кодом уровня MySQL. Механизм автоматического обнаружения
взаимоблокировок (deadlock ) InnoDB не может детектировать
взаимоблокировки, в которых участвуют такие блокировки таблиц (см.
следующий раздел). Кроме того, поскольку MySQL ``знает'' о блокировке
на уровне строки, возможно установление блокировки таблицы, в которой
другой пользователь заблокировал строки. Но это не опасно для
целостности транзакции. See section 7.5.14 Ограничения для таблиц InnoDB.
|
|