Запуск транзакции
Серверы БД обрабатывают создание транзакций одним из двух воз
можных способов:
•
Активная транзакция всегда присутствует для каждого сеанса ра
боты с БД, поэтому нет ни необходимости, ни способа для явного
234
Глава 12. Транзакции
начала транзакции. По завершении транзакции сервер автоматиче
ски начинает новую транзакцию для сеанса пользователя.
•
Если транзакция не начата явно, отдельные SQLвыражения фик
сируются автоматически независимо друг от друга. Чтобы начать
транзакцию, сначала нужно запустить на выполнение команду.
Из трех рассматриваемых серверов первый подход использует Oracle
Database, а Microsoft SQL Server и MySQL – второй. Одно из преиму
ществ подхода Oracle к обработке транзакций в том, что даже в случае
одиночной SQLкоманды есть возможность сделать откат, если пользо
вателя не удовлетворяет результат или он изменил свое мнение. Таким
образом, если вы забудете вставить блок
where
в выражение
delete
, ос
танется возможность отменить неверные действия (разумеется, только
если вы осознаете, допив свой утренний кофе, что не хотели удалять
все 125 000 строк своей таблицы)). Однако при работе с MySQL и SQL
Server, как только нажата клавиша
Enter
, изменения, осуществленные
SQLвыражением, становятся постоянными (и тогда только админист
ратор БД сможет восстановить исходные данные из резервной копии
или какимилибо иными средствами).
Стандарт SQL:2003 включает команду
start
transaction
(запустить
транзакцию), предназначенную для явного начала транзакции. MySQL
соответствует этому стандарту, а пользователи SQL Server должны вы
зывать команду
begin
transaction
(начать транзакцию). Для обоих сер
веров, пока транзакция не начата явно, все операции выполняются
в
режиме автоматической фиксации
(
autocommit mode
), т. е. сервер
автоматически фиксирует отдельные выражения. Следовательно, мож
но принять решение об использовании транзакций и выполнить ко
манду запустить/начать транзакцию или просто позволить серверу
фиксировать отдельные выражения.
Оба сервера, MySQL и SQL Server, позволяют отключать режим авто
матической фиксации для отдельных сеансов. В этом случае серверы
будут вести себя в отношении транзакций точно так же, как Oracle Da
tabase. В SQL Server для отключения режима автоматической фикса
ции служит следующая команда:
SET IMPLICIT_TRANSACTIONS ON
MySQL позволяет отключить режим автоматической фиксации так:
SET AUTOCOMMIT=0
Если режим автоматической фиксации выключен, все SQLкоманды
выполняются в рамках транзакции, и их фиксацию или откат следует
выполнять явно.
Рекомендация: при каждом входе в систему следует отключать
режим автоматической фиксации. Выполнение всех SQLвыра
жений в рамках транзакции должно войти в привычку. По край
Что такое транзакция?
235
ней мере, это поможет вам избежать унизительной необходимо
сти просить администратора БД восстановить уничтоженные по
неосторожности данные.
Достарыңызбен бөлісу: |