MySQL имеет в своем арсенале две переменные, позволяющие управлять транзак­циями, - AUTOCOMMIT и TRANSACTION ISOLATION LEVEL. Мы обсудим их подробнее в следующих разделах.
Автоматическое выполнение транзакции
По умолчанию MySQL сразу же выполняет каждый SQL-запрос. Этот режим работы называется режимом автовыполнения и является причиной того, что каждый сеанс MySQL не требуется начинать операторами START TRANSACTION или завершать операторами COMMIT или ROLLBACK. Или другими словами, MySQL рассматривает каждый запрос как транзакцию, состоящую из одного оператора.
Это стандартное поведение можно изменить, манипулируя переменной AUTOCOMMIT, которая управляет режимом автовыполнения MySQL. Следующий фрагмент демонст­рирует отключение стандартного поведения MySQL, заключающегося в выдаче команды COMMIT после каждого SQL-оператора.
Листинг 12.10.
mysql> SET AUTOCOMMIT = 0;
Query OK, 0 rows affected (0.02 sec)
После этого любое изменение в таблицах не будет сохранено в базе данных до тех пор, пока не поступит команда завершения транзакции COMMIT. В действительности, если за­вершить сеанс MySQL без команды COMMIT, база данных автоматически запустит ко­манду ROLLBACK для того, чтобы отменить все изменения, сделанные во время этого се­анса, отменяя тем самым всю работу, проделанную во время сеанса. Это можно проил­люстрировать на следующем примере.
Листинг 12.11.
mysql> SET AUTOCOMMIT = 0;
Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM gallery; Empty set (0.00 sec)
mysql> INSERT INTO gallery (id, filename, dsc) VALUES (52, 'dog.gif', 'Me and my pooch');
Query OK, 1 row affected (0.00 sec)
mysql> exit
Bye

Больше скорости
Плохая производительность MySQL зачастую бывает вызвана большим количеством небольших обновлений совместно с активизированным режимом автовыполнения.
А теперь запустим новый сеанс.
Листинг 12.12.
[user@host] $ mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 14 to server version: 4.0.12-max-debug 
mysql> SELECT * FROM gallery;
Empty set (0.01 sec)
Режим автовыполнения всегда можно включить вновь, вернув переменную AUTOCOMMIT в ее исходное состояние.
Листинг 12.13.
mysql> SET AUTOCOMMIT = 1;
Query OK, 0 rows affected (0.00 sec)
При включении режима автовыполнения, MySQL автоматически выдаст команду COMMIT и сохранит все открытые транзакции.
Получить текущее значение переменной AUTOCOMMIT можно в любой момент с по­мощью оператора SELECT.
Управление поведением транзакции
Переменная AUTOCOMMIT является сеансовой переменной и по умолчанию при за­пуске сеанса нового клиента имеет значение 1. На момент написания этой книги еще не была предусмотрена возможность задавать по умолчанию значение этой переменной, равное 0. Более подробную информацию об изменении и просмотре переменных сервера можно получить в главе 13, "Администрирование и настройка".
Ошибочный тип
Переменная AUTOCOMMIT воздействует только на таблицы, поддерживающие работу с транзакциями. При работе с такими таблицами, например MyISAM, переменная AUTOCOMMIT не оказывает никакого влияния и изменения в таких таблицах всегда сохраняются сразу же.