MySQL имеет несколько команд, предназначенных для запуска, завершения и отката транзакций. В этом разделе они обсуждаются детально.
Заметим, что MySQL поддерживает транзакции через свои таблицы типа InnoDB и BDB, а значит, эти команды можно использовать только при работе с таблицами этих типов. По умолчанию в MySQL типом для новых таблиц является MyISAM, но принудительно с помощью дополнительного предложения к команде CREATE TABLE модификатором TYPE можно задать тип таблицы InnoDB, как в следующей команде: CREATE TABLE имя-таблицы (объявление-полей) TYPE = INNODB;
Для существующих таблиц тип можно изменить динамически с помощью команды ALTER TABLE, просто добавив новое предложение TYPE, как показано ниже: ALTER TABLE имя- таблицы TYPE = INNODB;
Семь раз отмерь, один раз отрежь
Команда ALTER TABLE работает так: сначала она резервирует данные из таблицы, удаляет таблицу, воссоздает таблицу с указанными изменениями, а затем добавляет в таблицу зарезервированные данные. Сбой при выполнении одного из этих шагов приведет к полной утере и разрушению данных. Поэтому перед работой с командой ALTER TABLE рекомендуется сделать резервную копию изменяемой с помощью команды ALTER TABLE таблицы. Подробнее о команде ALTER TABLE можно узнать в главе 8, "Обработка баз данных и таблиц".
Для инициализации транзакции и передачи MySQL информации о том, что все последующие SQL-операторы должны рассматриваться единым блоком, MySQL имеет команду START TRANSACTION, предназначенную для обозначения начала транзакции.
Листинг 12.1.
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
Начало транзакции также можно обозначить командами BEGIN или BEGIN WORK. Обычно за командой START TRANSACTION должны следовать SQL-операторы, собственно составляющие саму транзакцию. Предположим, что транзакция состоит из операции по добавлению работника в систему, а конкретные операции заключаются в создании записи о работнике, добавлении этого работника в список определенного отдела, определении уровня заработной платы и надбавок для этого работника.
Листинг 12.2.
mysql> INSERT INTO employees (ename, enationality) VALUES ('Tim Jonez', 'US');
Query OK, 1 row affected (0.13 sec) mysql> INSERT INTO departments (eid, dept) VALUES (LAST_INSERT_ID(), 'Accounts');
Query OK, 1 row affected (0.03 sec)
mysql> INSERT INTO payroll (eid, pbasic, pbonus) VALUES
(LAST_INSERT_ID(), 36000.00, 2500.00);
Query OK, 1 row affected (0.02 sec)
Теперь можно просмотреть эти таблицы, чтобы убедиться, что данные были введены без ошибок. Воспользуемся для этого быстрым запросом SELECT.
После выполнения SQL-операторов возможны два действия: сохранить результаты выполнения транзакции на диск с помощью оператора COMMIT или отменить все изменения с помощью команды ROLLBACK. Сначала сделаем второе.
Листинг 12.4.
mysql> ROLLBACK;
Query OK, 0 rows affected (0.02 sec)
Давайте проверим, что действие команд было отменено.
Листинг 12.5.
mysql> SELECT * FROM employees;
Empty set (0.01 sec)
mysql> SELECT * FROM departments;
Empty set (0.00 sec)
mysql> SELECT * FROM payroll;
Empty set (0.00 sec)
Если транзакция включает изменения в таблицах, как предусматривающих поддержку транзакций, так и не имеющих такой поддержки, та часть транзакции, в которой задействованы таблицы, тип которых не поддерживает транзакций, с помощью команды ROLLBACK восстановлена быть не может. В таком случае MySQL возвращает ошибку, которая обозначает неполный откат.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Жизненный цикл транзакции
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Транзакции и свойства ACID. Продолжение. | Все о MySQL. Жизненный цикл транзакции. Продолжение. |