Spec-Zone .ru
спецификации, руководства, описания, API
|
Чтобы реализовать крупномасштабное, занятое, или высоконадежное приложение базы данных, портировать существенный код от различной системы баз данных, или продвинуть производительность MySQL к пределам законов физики, следует понять понятия транзакций и блокирующий, поскольку они касаются механизма хранения InnoDB.
В InnoDB
модель транзакции, цель состоит в том, чтобы объединить лучшие свойства
базы данных мультиуправления версиями с традиционной двухфазной блокировкой. InnoDB
делает соединение уровня строки и выполняет запросы как непротиворечивые чтения без блокировки по умолчанию, в
стиле Oracle. Информация о блокировке в InnoDB
сохранен так пространство
эффективно, что повышение уровня блокировок не необходимо: Как правило, нескольким пользователям разрешают
привязать каждую строку InnoDB
таблицы, или любое случайное подмножество строк, без
порождения InnoDB
исчерпание памяти.
В InnoDB
, все пользовательское действие происходит в транзакции. Если режим
автоматической фиксации включается, каждый SQL-оператор формирует единственную транзакцию самостоятельно. По
умолчанию MySQL запускает сеанс для каждого нового соединения с включенной автоматической фиксацией, таким
образом, MySQL делает фиксацию после каждого SQL-оператора если, что оператор не возвращал ошибку. Если оператор
возвращает ошибку, поведение фиксации или отката зависит от ошибки. См. Раздел
14.2.3.14,"InnoDB
Обработка ошибок".
Сеанс, у которого есть включенная автоматическая фиксация, может выполнить транзакцию многократного оператора,
запуская ее с явного START
TRANSACTION
или BEGIN
оператор и окончание этого с a COMMIT
или ROLLBACK
оператор. См. Раздел
13.3.1,"START TRANSACTION
, COMMIT
, и ROLLBACK
Синтаксис".
Если режим автоматической фиксации отключается в пределах сеанса с SET autocommit =
0
, у сеанса всегда есть открытая транзакция. A COMMIT
или ROLLBACK
оператор заканчивает текущую транзакцию, и новый запускается.
A COMMIT
средства, что изменения, сделанные в текущей транзакции, делаются постоянными и становятся видимыми к другим
сеансам. A ROLLBACK
оператор, с другой стороны, отменяет все модификации, сделанные
текущей транзакцией. Оба COMMIT
и ROLLBACK
выпустите все InnoDB
блокировки,
которые были установлены во время текущей транзакции.
С точки зрения уровней
изоляции транзакции SQL:1992, значения по умолчанию InnoDB
уровень REPEATABLE
READ
. InnoDB
предложения все четыре уровня изоляции транзакции
описываются стандартом SQL: READ UNCOMMITTED
, READ COMMITTED
, REPEATABLE READ
, и SERIALIZABLE
.
Пользователь может изменить уровень изоляции для единственного сеанса или для всех последующих соединений с SET TRANSACTION
оператор. Чтобы установить уровень изоляции значения по умолчанию
сервера для всех соединений, используйте --transaction-isolation
опция на командной строке или в файле опции. Для
получения дальнейшей информации об уровнях изоляции и устанавливающем уровень синтаксисе, см. Раздел
13.3.6,"SET TRANSACTION
Синтаксис".
В блокировке на уровне
строки, InnoDB
обычно блокировка следующего ключа использования. Это означает,
что кроме того индексируют записи, InnoDB
может также заблокировать разрыв,
предшествующий индексировать записи, чтобы блокировать вставки другими сеансами, где индексированные значения
были бы вставлены в тот разрыв в пределах древовидной структуры данных. Следующая блокировка ключа обращается к
блокировке, которая блокирует индексировать запись и разрыв перед нею. Блокировка разрыва обращается к
блокировке, которая блокирует только разрыв прежде, чем некоторые индексируют запись.
Для получения дополнительной информации о блокировке на уровне строки, и обстоятельствах, при которых
отключается блокировка разрыва, см. Раздел 14.2.3.5,"InnoDB
Запись, Разрыв, и Следующие блокировки ключа".