По умолчанию MySQL работает в режиме
autocommit. Это означает, что
при выполнении обновления данных
MySQL будет сразу записывать
обновленные данные на диск.
При использовании таблиц,
поддерживающих транзакции (таких
как InnoDB, BDB), в
MySQL можно отключить режим autocommit при
помощи следующей команды:
SET AUTOCOMMIT=0
После этого необходимо применить
команду COMMIT для записи
изменений на диск или команду
ROLLBACK, которая позволяет
игнорировать изменения,
произведенные с начала данной
транзакции.
Если необходимо переключиться из
режима AUTOCOMMIT только для
выполнения одной
последовательности команд, то для
этого можно использовать команду
START TRANSACTION или
BEGIN или BEGIN WORK:
START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summmary=@A WHERE type=1; COMMIT;
START TRANSACTION была добавлена
в MySQL 4.0.11. Это - рекомендованный
способ открыть транзакцию, в
соответствии с синтаксисом ANSI SQL.
Отметим, что при использовании
таблиц, не поддерживающих
транзакции, изменения будут
записаны сразу же, независимо от
статуса режима autocommit.
При выполнении команды
ROLLBACK после обновления
таблицы, не поддерживающей
транзакции, пользователь получит
ошибку
(ER_WARNING_NOT_COMPLETE_ROLLBACK) в
виде предупреждения. Все таблицы,
поддерживающие транзакции, будут
перезаписаны, но ни одна таблица,
не поддерживающая транзакции, не
будет изменена.
При выполнении команд START
TRANSACTION или SET AUTOCOMMIT=0
необходимо использовать двоичный
журнал MySQL для резервных копий
вместо более старого журнала
записи изменений. Транзакции
сохраняются в двоичном системном
журнале как одна порция данных
(перед операцией COMMIT),
чтобы гарантировать, что
транзакции, по которым происходит
откат, не записываются. See
Раздел 4.9.4, «Бинарный журнал обновлений».
Следующие команды автоматически
завершают транзакцию (как если бы
перед выполнением данной команды
была сделана операция
COMMIT ):
| Команда | Команда | Команда |
ALTER TABLE |
BEGIN |
CREATE INDEX |
DROP DATABASE |
DROP TABLE |
RENAME TABLE |
TRUNCATE |
Уровень изоляции для транзакций
можно изменить с помощью команды
SET TRANSACTION ISOLATION LEVEL .... See
Раздел 6.7.3, «Синтаксис команды SET TRANSACTION».
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.
© 1995-2005 MySQL AB. All rights reserved.
