Читайте также: |
|
Серверы БД обрабатывают создание транзакций одним из двух воз_ можных способов:
• Активная транзакция всегда присутствует для каждого сеанса ра_ боты с БД, поэтому нет ни необходимости, ни способа для явного
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_выра_ жений в рамках транзакции должно войти в привычку. По край_
Что такое транзакция? | |
ней мере, это поможет вам избежать унизительной необходимо_ сти просить администратора БД восстановить уничтоженные по неосторожности данные.
Дата добавления: 2015-08-17; просмотров: 43 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Что такое транзакция? | | | Завершение транзакции |