Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD-2007-0.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
2.68 Mб
Скачать

10.2. Транзакции

Транзакция – это совокупность одной или нескольких SQL-инструкций, имеющих начало и конец. В конце транзакции происходит либо ее отмена, либо завершение. Отмена транзакции называется откатом (ROLLBACK), так как происходит последовательная отмена всех сделанных изменений. Успешное завершение транзакции завершается фиксацией результатов (COMMIT или фиксация). Если окажется, что зафиксированная транзакция была ошибочной, потребуется выполнить другую транзакцию, отменяющую действия, выполненные первой транзакцией.

Считается, что правильная транзакция обладает следующими свойствами:

  • атомарностью. Под атомарностью понимается принцип неделимости: все инструкции, составляющие транзакцию, обязательно выполняются, иначе не выполняется ни одна из них. Никаких промежуточных состояний не существует. Это свойство типа "все или ничего". Любая транзакция представляет собой неделимую единицу работы, которая может быть либо выполнена целиком, либо не выполнена вовсе;

  • согласованностью. База данных поддерживает внутреннюю согласованность за счет сериализации транзакций. Несмотря на кажущуюся одновременность событий, результаты транзакций заносятся в базу данных последовательно. Каждая транзакция должна переводить БД из одного согласованного состояния в другое согласованное состояние;

  • изолированностью. Все транзакции изолируются друг от друга, т.е. выполняются независимо одна от другой, а изменения, вызываемые каждой из них, становятся доступными лишь после завершения транзакции. Другими словами, промежуточные результаты незавершенной транзакции не должны быть доступны другим транзакциям;

  • устойчивостью (иногда это свойство называют продолжительностью). Свойство устойчивости означает, что при успешном завершении транзакции в базу данных вносятся постоянные, не отменяемые изменения. Устойчивая база данных способна выдержать внезапную аварию, например, сбой питания, и при этом остаться согласованной.

Транзакция реализуется путем ведения журнала всех изменений, вносимых в базу данных в ходе каждой транзакции. Когда происходит откат, СУБД сверяется с журналом и отменяет все изменения. По журналу легко можно восстановить согласованное состояние базы данных в случае сбоя. Ведение журнала транзакций приводит к снижению производительности, поэтому в MySQL для таблиц стандартного типа – MyISAM – транзакции не поддерживаются. Это одна из причин столь высокой скорости работы программы.

Транзакции в MySQL появились сравнительно недавно и поддерживаются пока только для таблиц расширенных типов, таких как InnoDB, Berkeley DB, Gemini. Однако следует отметить, что во многих ситуациях транзакции не нужны, так как табличных блокировок более чем достаточно.

В отличие от других СУБД, MySQL предоставляет пользователям право выбора:

  • можно работать с более медленными таблицами, поддерживающими транзакции, или

  • с более быстрыми таблицами, где транзакции недопустимы.

Транзакции необходимы там, где действует много соперничающих за право доступа к ресурсам параллельных потоков, а потеря данных обходится слишком дорого. Например, это – крупные банковские системы.

Если же интенсивность потоков значительно ниже, а потеря данных так же недопустима, то можно воспользоваться табличными блокировками. Когда программа в таком потоке запускается, она блокирует определенное число таблиц. В результате никакой другой клиент не сможет завершить свою работу в это же самое время. По мере роста интенсивности потоков производительность системы снижается, зато целостность остается неизменной. Незаблокированные таблицы остаются доступными для остальных клиентов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]