MySQL

:: DEVELOPER ZONE

Login / Register

  • MySQL.com
  • Developer Zone
  • Partners
  • Online Shop
  • Downloads
  • Documentation
  • Forums
  • Lists
  • Bugs
  • Events
  • User Groups
  • Guilds
  • Blogs
  • Support
  • Resources
  • Books
  • FAQ

Справочное руководство по MySQL 4.0. :: 7 Типы таблиц MySQL :: 7.5 Таблицы InnoDB :: 7.5.8 Транзакционная модель InnoDB :: 7.5.8.4 Блокировка, осуществляемая различными операторами SQL в InnoDB

  • Overview
  • MySQL Reference Manual
  • MaxDB Documentation
  • Connectors

Search the MySQL manual:


  • Справочное руководство по MySQL 4.0.

  • 7.5.8 Транзакционная модель InnoDB
  • 7.5.8.1 Согласованное чтение
  • 7.5.8.2 Чтение с блокировкой
  • 7.5.8.3 Блокировка следующего ключа: устранение проблемы с фантомом
  • 7.5.8.4 Блокировка, осуществляемая различными операторами SQL в InnoDB
  • 7.5.8.5 Обнаружение и откат взаимоблокировки (deadlock)
  • 7.5.8.6 Пример работы согласованного чтения в InnoDB
  • 7.5.8.7 Каким образом избежать взаимоблокировок (deadlock)?
  • 7.5.8.8 Рекомендации по увеличению производительности
  • 7.5.8.9 InnoDB Monitor

Get the MySQL Language Reference and MySQL Administrator's Guide from MySQL Press!


Additional languages

  • German


Learn about new MySQL releases, technical articles, events and more.

Subscribe to the monthly MySQL Newsletter!


Previous / Next / Up / Table of Contents

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 Раздел 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.

Top / Previous / Next / Up / Table of Contents

© 1995-2005 MySQL AB. All rights reserved.

  • About MySQL
  • Careers
  • Site Map
  • Contact Us
  • Legal
  • Privacy Policy
  • Trademark Info
  • No Software Patents!