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».