7.5.8.3 Блокировка следующего ключа: устранение проблемы с фантомом | Оглавление | 7.5.8.5 Обнаружение и откат взаимоблокировки (deadlock) |
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.
7.5.8.3 Блокировка следующего ключа: устранение проблемы с фантомом | Оглавление | 7.5.8.5 Обнаружение и откат взаимоблокировки (deadlock) |