ТОП-10 популярных


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


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

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

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

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


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

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

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...

Internet2, или cтарые песни о новом
Когда-то на заре Интернета, тогдаеще военно-научной сетиAPRAnet, были заложены основныепринципы функционирования«Сети сетей». В их числе — использованиепротокола, называемого сейчасIPv4. В...

Все о MySQL. Жизненный цикл транзакции. Продолжение.


28-12-2009

Листинг 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 предусматривают поддержку точек сохранения, позво­ляющих размещать маркеры в критических точках во время выполнения транзакции, чтобы при необходимости иметь возможность сделать частичный откат транзакции. Это может пригодиться в случае возникновения ошибки при работе с длинными тран­закциями, такая точка сохранения позволяет откатить только ту часть транзакции, в результате выполнения которой произошла ошибка, а не всю транзакцию.
По точкам сохранения сейчас продолжаются разработки, поэтому следите за по­следними новостями.

Понравился материал? Поделитесь с друзьями!



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