SQL> UPDATE sample SET comm=100 WHERE comm IS NULL;
SQL> COMMIT;
SQL> SELECT * FROM sample;
ENAME COMM
---------- ---------
ADAMS 100
STONE 100
Отклонение транзакции
Отклонить незафиксированные изменения можно с помощью команды ROLLBACK. В результате выполнения этой команды:
· восстанавливается прежнее состояние данных, все изменения теряются;
· все пользователи видят данные такими, какими они были до начала транзакции;
· снимается блокировка с изменяемых строк, другие пользователи получают возможность вносить в них изменения;
· удаляются все точки сохранения
SQL> SELECT * FROM sample;
ENAME COMM
---------- ---------
ADAMS
FORD
SQL> DELETE FROM sample WHERE ename='FORD';
SQL> INSERT INTO sample (ename) VALUES ('STONE');
SQL> UPDATE sample SET comm=100 WHERE comm IS NULL;
SQL> ROLLBACK;
SQL> SELECT * FROM sample;
ENAME COMM
---------- ---------
ADAMS
FORD
Отклонение транзакции до точки сохранения
С помощью команды SAVEPOINT Вы можете разбить транзакцию на более мелкие единицы, создав точки сохранения во время выполнения транзакции. После этого Вы сможете отвергнуть транзакцию или полностью, или до определенной точки сохранения, выполнив команду ROLLBACK TO точка_сохранения. Таким образом, Вы можете создать несколько точек сохранения с разными именами и отвергнуть транзакцию до любой из этих точек. Если Вы создаете две точки сохранения с одним и тем же именем, первая точка сохранения с таким именем будет удалена.
Если при выполнении транзакции возникла ошибка в одной команде DML, будет отменен только результат этой команды, изменения, сделанные другими командами обработки данных сохранятся и могут быть приняты (COMMIT) или отвергнуты (ROLLBACK).
SQL> SELECT * FROM sample;
ENAME COMM
---------- ---------
ADAMS
FORD
SQL> DELETE FROM sample WHERE ename='FORD';
SQL> SAVEPOINT sp1;
SQL> INSERT INTO sample (ename) VALUES ('STONE');
SQL> SAVEPOINT sp2;
SQL> UPDATE sample SET comm=100 WHERE comm IS NULL;
SQL> ROLLBACK TO sp2;
SQL> COMMIT;
SQL> SELECT * FROM sample;
ENAME COMM
---------- ---------
ADAMS
STONE
Начало транзакции
Транзакция в SQL Server может начинаться явно, неявно или в режиме autocommit (режим по умолчанию).
· В режиме явных транзакций (explicit transactions) транзакция начинается с предложения BEGIN TRANSACTION.
· В режиме autocommit подтверждается каждое успешное утверждение Transact-SQL. В этом режиме нет необходимости явно использовать команды начала и завершения транзакции.
· Предложение SET IMPLICIT_TRANSACTIONS ON инициализирует режим неявных транзакций (implicit transactions). Следующее предложение автоматически начинает новую транзакцию. После того, как транзакция будет завершена, следующее утверждение Transact-SQL начнет новую транзакцию.
Завершение транзакции
Транзакция явно завершается предложением:
· COMMIT [{TRANSACTION | WORK}] – подтверждение транзакции. Все изменения данных становятся постоянными. Освобождаются ресурсы, занимаемые транзакцией, такие, как блокировки.
· ROLLBACK [{TRANSACTION | WORK}] – отмена транзакции. Все изменения откатываются, данные принимают состояние, которое они имели на начало транзакции. Освобождаются ресурсы, занимаемые транзакцией.
SQL Server автоматически откатывает транзакцию и освобождает занимаемые данной транзакцией ресурсы если:
· во время выполнения транзакции произошла серверная ошибка;
· завершится (аварийно или успешно) клиентское приложение или сеанс, выполняющий транзакцию;
При выполнении транзакций могут происходить следующие нежелательные процессы:
· Грязное чтение (Dirty reads) – транзакция видит данные, которые были изменены, но не подтверждены другой транзакцией
· Нерегулярное чтение (Nonrepeatable reads) – транзакция читает данные, которые она уже читала, и обнаруживает, что другая подтвержденная транзакция изменила или удалила эти данные
· Фантомное чтение (Phantom reads) – транзакция заново выполняет запрос, возвращающий множество строк, удовлетворяющих некоторому поисковому критерию, и обнаруживает новые строки, добавленные другой подтвержденной транзакцией, удовлетворяющие этому условию.
Стандарт SQL2 описывает четыре уровня изоляции транзакций в зависимости от того, какие из перечисленных выше явлений они допускают.
Уровень изоляции |
Грязное чтение |
Нерегулярное чтение |
Фантомное чтение |
Описание |
Неподтвержденное чтение Read uncommitted |
Допускается |
Допускается |
Допускается |
Возможно чтение неподтвержденных данных |
Подтвержденное чтение Read committed |
Не допускается |
Допускается |
Допускается |
Транзакция не может читать данные, не подтвержденные другой транзакцией |
Регулярное чтение Repeatable read |
Не допускается |
Не допускается |
Допускается |
Блокировка помещается на все строки, используемые в транзакции; другие транзакции не могут изменять эти данные, но могут добавлять новые строки. |
Сериализованный Serializable |
Не допускается |
Не допускается |
Не допускается |
Блокировка помещается на множество данных; другие транзакции не могут добавлять или обновлять строки в данном множестве. |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.