6.7.1 Синтаксис команд BEGIN/COMMIT/ROLLBACK
По умолчанию MySQL работает в режиме autocommit
. Это означает, что при
выполнении обновления данных MySQL будет сразу записывать обновленные
данные на диск.
При использовании таблиц, поддерживающих транзакции (таких как InnoDB
,
BDB
), в MySQL можно отключить режим autocommit при помощи следующей
команды:
SET AUTOCOMMIT=0
После этого необходимо применить команду COMMIT
для записи изменений на
диск или команду ROLLBACK
, которая позволяет игнорировать изменения,
произведенные с начала данной транзакции.
Если необходимо переключиться из режима AUTOCOMMIT
только для выполнения
одной последовательности команд, то для этого можно использовать команду
BEGIN
или BEGIN WORK
:
BEGIN;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;
Отметим, что при использовании таблиц, не поддерживающих транзакции,
изменения будут записаны сразу же, независимо от статуса режима
autocommit
.
При выполнении команды ROLLBACK
после обновления таблицы, не
поддерживающей транзакции, пользователь получит ошибку
(ER_WARNING_NOT_COMPLETE_ROLLBACK
) в виде предупреждения. Все таблицы,
поддерживающие транзакции, будут перезаписаны, но ни одна таблица, не
поддерживающая транзакции, не будет изменена.
При выполнении команд BEGIN
или SET AUTOCOMMIT=0
необходимо использовать
двоичный журнал MySQL для резервных копий вместо более старого
журнала записи изменений. Транзакции сохраняются в двоичном системном
журнале как одна порция данных (перед операцией COMMIT
), чтобы
гарантировать, что транзакции, по которым происходит откат, не
записываются. See section 4.9.4 Бинарный журнал обновлений.
Следующие команды автоматически завершают транзакцию (как если бы перед
выполнением данной команды была сделана операция COMMIT
):
Команда | Команда | Команда
|
ALTER TABLE | BEGIN | CREATE INDEX
|
DROP DATABASE | DROP TABLE | RENAME TABLE
|
TRUNCATE | |
|
Уровень изоляции для транзакций можно изменить с помощью команды SET
TRANSACTION ISOLATION LEVEL ...
. See section 6.7.3 Синтаксис команды SET TRANSACTIO
N.