Транзакция неделимая, с точки зрения воздействия на БД, последовательность операторов манипулирования данными (чтения, удаления, вставки, модификации). При фиксации изменений в базе данных гарантируется сохранение либо всех изменений, либо ни одного. Поддержание механизма транзакций показатель уровня развитости СУБД. Корректный механизм поддержания транзакций одновременно является основой обеспечения целостности баз данных.
У транзакций есть свои свойства – сокращенно ACID (Atomicity, Consistency, Isolation, Durability)
- Неделимость – транзакции либо выполняются полностью, либо не выполняются.
- Согласованность – транзакция переводит базу данных из одного согласованного состояния в другое.
- Изолированность – результаты транзакции становятся доступны для других транзакций только после её фиксации.
- Продолжительность – после фиксации транзакции изменения становятся постоянными.
Все команды, выполняемые пользователями на сервере, производятся в теле транзакций. Однако существуют два подхода к указанию границ транзакций в потоке команд – это явные и неявные транзакции.
- Явные – по умолчанию, каждая команда выполняется как отдельная транзакция. Пользователь может объединить несколько команд в одну транзакцию, явно указав начало и конец.
- Неявные – не существует оператора транзакции. Транзакция начинается с началом сеанса работы с БД. Завершается транзакция при следующих событиях:
- Явно выполненный оператор завершения транзакции – rollback или commit.
- Оператор DDL.
- Завершение сеанса.
После окончания транзакции сразу неявно начинается новая транзакция.
Операторы управления транзакцией:
- COMMIT. Оператор COMMIT завершает транзакцию и делает любые выполненные в ней изменения постоянными (продолжительными). В распределенных транзакциях используются расширения оператора COMMIT. Эти расширения позволяют пометить оператор COMMIT (точнее, пометить транзакцию), задав для него комментарий, а также принудительно зафиксировать сомнительную распределенную транзакцию.
- ROLLBACK. Простой оператор отката завершает транзакцию и отменяет все выполненные в ней и незафиксированные изменения. Для этого он читает информацию из сегментов отката и восстанавливает блоки данных в состояние, в котором они находились до начала транзакции.
- SAVEPOINT. Оператор SAVEPOINT позволяет создать в транзакции "метку", или точку сохранения. В одной транзакции можно выполнять оператор SAVEPOINT несколько раз, устанавливая несколько точек сохранения.
- ROLLBACK TO <точка сохранения>. Этот оператор используется совместно с представленным выше оператором SAVEPOINT. Транзакцию можно откатить до указанной точки сохранения, не отменяя все сделанные до нее изменения.
- SET TRANSACTION. Этот оператор позволяет устанавливать атрибуты транзакции, такие как уровень изолированности и то, будет ли она использоваться только для чтения данных или для чтения и записи. Этот оператор также позволяет привязать транзакцию к определенному сегменту отката.