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 не оказывает никакого влияния и изменения в таких таблицах всегда сохраняются сразу же.
ТОП-10 популярных

Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...

Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...

Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...

Все о MySQL. Управление поведением транзакции
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Жизненный цикл транзакции. Продолжение. | Все о MySQL. Уровни изолированности транзакций |