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
Раздел 7.5.13, «Ограничения для таблиц InnoDB».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
