Spec-Zone .ru
спецификации, руководства, описания, API

13.3.1. START TRANSACTION, COMMIT, иROLLBACK Синтаксис

START TRANSACTION    [transaction_characteristic [, transaction_characteristic] ...]transaction_characteristic:    WITH CONSISTENT SNAPSHOT  | READ WRITE  | READ ONLYBEGIN [WORK]COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]SET autocommit = {0 | 1}

Эти операторы обеспечивают управление использованием транзакций:

По умолчанию MySQL работает с включенным режимом автоматической фиксации. Это означает, что, как только Вы выполняете оператор, который обновления (изменяют) таблицу, MySQL хранит обновление о диске, чтобы сделать ее постоянной. Изменение не может откатываться.

Чтобы отключить режим автоматической фиксации неявно для единственной серии операторов, используйте START TRANSACTION оператор:

START TRANSACTION;SELECT @A:=SUM(salary) FROM table1 WHERE type=1;UPDATE table2 SET summary=@A WHERE type=1;COMMIT;

С START TRANSACTION, автоматическая фиксация остается отключенной, пока Вы не заканчиваете транзакцию COMMIT или ROLLBACK. Режим автоматической фиксации тогда возвращается к его предыдущему состоянию.

START TRANSACTION разрешения несколько модификаторов та контрольная сделка характеристики. Чтобы определить многократные модификаторы, разделите их запятыми.

Важный

Много API, используемых для того, чтобы записать клиентские приложения MySQL (такие как JDBC), обеспечивают свои собственные методы для того, чтобы они начали транзакции, которые могут (и иногда должен) использоваться вместо того, чтобы отправить a START TRANSACTION оператор от клиента. См. Главу 21, Соединители и API, или документацию для Вашего API, для получения дополнительной информации.

Чтобы отключить режим автоматической фиксации явно, используйте следующий оператор:

SET autocommit=0;

После отключения режима автоматической фиксации, устанавливая autocommit переменная, чтобы обнулить, изменения к безопасным от транзакции таблицам (таким как те для InnoDB или NDBCLUSTER) не делаются постоянными сразу. Следует использовать COMMIT сохранить Ваши изменения к диску или ROLLBACK проигнорировать изменения.

autocommit переменная сеанса и должна быть установлена для каждого сеанса. Чтобы отключить режим автоматической фиксации для каждого нового соединения, см. описание autocommit системная переменная в Разделе 5.1.4, "Системные Переменные Сервера".

BEGIN и BEGIN WORK поддерживаются как псевдонимы START TRANSACTION для того, чтобы инициировать транзакцию. START TRANSACTION стандартный синтаксис SQL, рекомендуемый способ запустить оперативную транзакцию, и разрешает модификаторы это BEGIN не делает.

BEGIN оператор отличается от использования BEGIN ключевое слово, которое запускает a BEGIN ... END составной оператор. Последний не начинает транзакцию. См. Раздел 13.6.1,"BEGIN ... END Синтаксис составного оператора".

Отметить

В пределах всех сохраненных программ (хранимые процедуры и функции, триггеры, и события), обработки синтаксического анализатора BEGIN [WORK] как начало a BEGIN ... END блок. Начните транзакцию в этом контексте с START TRANSACTION вместо этого.

Дополнительное WORK ключевое слово поддерживается для COMMIT и ROLLBACK, как CHAIN и RELEASE пункты. CHAIN и RELEASE может использоваться для дополнительного управления завершением транзакции. Значение completion_type системная переменная определяет поведение завершения значения по умолчанию. См. Раздел 5.1.4, "Системные Переменные Сервера".

AND CHAIN пункт заставляет новую транзакцию начинаться, как только текущий заканчивается, и у новой транзакции есть тот же самый уровень изоляции как только завершенная транзакция. RELEASE пункт заставляет сервер разъединять текущий клиентский сеанс после завершения текущей транзакции. Включая NO ключевое слово подавляет CHAIN или RELEASE завершение, которое может быть полезным если completion_type системная переменная устанавливается вызвать завершение объединения в цепочку или выпуска по умолчанию.

Начало транзакции заставляет любую транзакцию на ожидании фиксироваться. См. Раздел 13.3.3, "Операторы Который Причина Неявная Фиксация", для получения дополнительной информации.

Начало транзакции также вызывает блокировки таблицы, полученные с LOCK TABLES быть выпущенным, как если бы Вы выполнились UNLOCK TABLES. Начало транзакции не выпускает глобальную блокировку чтения, полученную с FLUSH TABLES WITH READ LOCK.

Для лучших результатов транзакции должны быть выполнены, используя только таблицы, которыми управляет единственный безопасный от транзакции механизм хранения. Иначе, следующие проблемы могут произойти:

Каждая транзакция сохранена в двоичном файле, входят в систему один блок, на COMMIT. Транзакции, которые откатываются, не регистрируются. (Исключение: Модификации к нетранзакционным таблицам не могут откатываться. Если транзакция, которая откатывается, включает модификации в нетранзакционные таблицы, вся транзакция регистрируется с a ROLLBACK оператор в конце, чтобы гарантировать, что модификации к нетранзакционным таблицам тиражируются.) См. Раздел 5.2.4, "Двоичный Журнал".

Можно изменить уровень изоляции или режим доступа для транзакций с SET TRANSACTION оператор. См. Раздел 13.3.6,"SET TRANSACTION Синтаксис".

Откат может быть медленной работой, которая может произойти неявно без пользователя, явно просившего его (например, когда ошибка происходит). Из-за этого, SHOW PROCESSLIST дисплеи Rolling back в State столбец для сеанса, не только для явных откатов, выполняемых с ROLLBACK оператор, но также и для неявных откатов.

Отметить

В MySQL 5.7, BEGIN, COMMIT, и ROLLBACK не влияют --replicate-do-db или --replicate-ignore-db правила.