7.5.8 Транзакционная модель InnoDB
Назначение транзакционной модели InnoDB заключается в том, чтобы
совместить лучшие свойства многовариантной базы данных и традиционной
двухфазной блокировки. Для таблиц InnoDB осуществляется блокировка на
уровне строки и запросы по умолчанию запускаются как целостное считывание
без блокировок, подобно тому, как это реализовано в Oracle. Хранение
таблицы блокировок InnoDB организовано настолько экономично, что нет
необходимости в расширении блокировки: обычно несколько пользователей
могут блокировать любую строку или любой набор строк в базе данных, не
занимая всю память, доступную для InnoDB.
В таблицах InnoDB все действия пользователей осуществляются при помощи
транзакций. Если в MySQL используется режим автоматической фиксации, то
для каждого оператора SQL будет создаваться отдельная транзакция. Если
режим автоматической фиксации отключен, то мы предполагаем, что у
пользователя постоянно имеется открытая транзакция. Если он выполняет
оператор SQL COMMIT
или ROLLBACK
, которые завершают текущую транзакцию,
сразу же запускается новая транзакция. Оба упомянутых оператора снимают
все блокировки InnoDB, которые были установлены во время выполнения
текущей транзакции. Оператор COMMIT
означает, что изменения, внесенные во
время выполнения текущей транзакции, зафиксированы и становятся видимыми
для других пользователей. Оператор ROLLBACK
отменяет все изменения,
внесенные текущей транзакцией.
Главы