Листинг 12.6.
mysql> ROLLBACK;
ERROR 1196: Some non-transactional changed tables couldn't be rolled back
А теперь снова выполним транзакцию, зафиксировав на этот раз все ее результаты. Листинг 12.7.
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO employees (ename, enationality) VALUES ('Tim Jonez1, "US');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO dspartments (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)
Проведем интересный эксперимент, заключающийся в создании еще одного подключения к серверу и проверке результатов работы предыдущих запросов SQL.
Листинг 12.8.
mysql> SELECT * FROM employees;
Empty set (0.06 sec)
mysql> SELECT * FROM departments;
Empty set (0.03 sec)
mysql> SELECT * FROM payroll;
Empty set (0.04 sec)
Возможно, вы удивлены, что записи, добавленные в одном сеансе, никак не отобразились в другом. Не волнуйтесь - вы только что увидели принцип изолированности в действии. Как подчеркивалось в предыдущем разделе, изолированность означает, что транзакция становится видимой только после успешного завершения транзакции. Из-за того, что транзакция все еще выполняется и ее результаты не были сохранены на диск, она невидима для другого пользователя этой же самой базы данных (при необходимости установки видимости между транзакциями, это можно сделать путем установки различных уровней изолированности транзакции, что обсуждается в разделе "Уровни изолированности транзакций").
После того, как вы убедились, что все данные добавлены корректно, настало время с помощью команды COMMIT сохранить изменения, сделанные в таблицах.
Листинг 12.9.
mysql> COMMIT;
Query OK, 0 rows affected (0.01 sec)
Командой COMMIT обозначается завершение блока транзакции. После завершения транзакции все изменения, произведенные этой транзакцией, становятся видимыми другим клиентским сеансам.
На рис. 12.3 иллюстрируется жизненный цикл транзакции с помощью простой блок-схемы.
Необходимо отметить, что MySQL в своей работе использует модель плоской транзакции: вложенные транзакции не разрешены и начало новой транзакции командой START TRANSACTION или BEGIN автоматически завершает предыдущую транзакцию. Кроме того, есть и другие команды MySQL, равносильные команде COMMIT:
■ DROP DATABASE/DROP TABLE
■ CREATE INDEX/DROP INDEX
■ ALTER TABLE/RENAME TABLE
■ LOCK TABLES/UNLOCK TABLES
■ SET AUTOCOMMIT = 1
Шаг за шагом
Последние версии 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. Жизненный цикл транзакции | Все о MySQL. Управление поведением транзакции |