Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по курсу ИСиТ.docx
Скачиваний:
6
Добавлен:
07.02.2024
Размер:
1.07 Mб
Скачать

Явные транзакции

Явными транзакциями являются транзакции, для которых явно назначаются запуск и остановка. Сценарии Transact-SQL используют для определения явных транзакций инструкции Transact-SQL BEGIN TRANSACTION, COMMIT TRANSACTION, COMMIT WORK, ROLLBACK TRANSACTION и ROLLBACK WORK.

BEGIN TRANSACTION

Отмечает точку запуска явной транзакции для соединения.

COMMIT TRANSACTION или COMMIT WORK

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

ROLLBACK TRANSACTION или ROLLBACK WORK

Используется для удаления транзакции, если были ошибки. Все измененные транзакцией данные возвращаются в то состояние, в котором они были в момент запуска транзакции. Ресурсы, заблокированные транзакцией, высвобождаются.

Режим явной транзакции работает только во время выполнения транзакции. После завершения транзакции соединение возвращается в тот режим транзакции, в котором оно было до запуска явной транзакции, либо в неявный режим, либо в режим автоматической фиксации.

Неявные транзакции

Если соединение выполняется в режиме неявных транзакций, экземпляр компонента SQL Server Database Engine автоматически начинает новую транзакцию после фиксации или отката текущей. Для запуска таких транзакций ничего делать не нужно - необходимо только фиксировать или выполнять откат каждой транзакции. Режим неявных транзакций формирует непрерывную цепь транзакций.

После установления на соединении режима неявных транзакций экземпляр компонента Database Engine автоматически запускает транзакцию, если вначале выполняет любую из следующих инструкций:

ALTER TABLE

INSERT

CREATE

OPEN

DELETE

REVOKE

DROP

SELECT

FETCH

TRUNCATE TABLE

GRANT

UPDATE

Транзакция продолжает оставаться активной до тех пор, пока не будет выдана инструкция COMMIT или ROLLBACK. После фиксации или отката первой транзакции экземпляр компонента Database Engine автоматически запускает новую транзакцию каждый раз, когда на соединении выполняется какая-либо из этих инструкций. Экземпляр продолжает формировать цепь неявных транзакций до тех пор, пока не будет выключен режим неявных транзакций.

Режим неявных транзакций устанавливается или при помощи инструкции языка Transact-SQL SET, или функциями и методами API базы данных.

Инструкция SET IMPLICIT_TRANSACTIONS OFF используется для отключения режима неявных транзакций. Инструкции COMMIT TRANSACTION, COMMIT WORK, ROLLBACK TRANSACTION или ROLLBACK WORK используются для завершения каждой транзакции.

CREATE TABLE ImplicitTran (ColA int PRIMARY KEY, ColB char(3) NOT NULL);

GO

SET IMPLICIT_TRANSACTIONS ON;

GO

-- первая неявная транзакции инициируется командой INSERT.

INSERT INTO ImplicitTran VALUES (1, 'aaa');

GO

INSERT INTO ImplicitTran VALUES (2, 'bbb');

GO

-- фиксация первой транзакции.

COMMIT TRANSACTION;

GO

-- вторая неявная транзакции инициируется командой SELECT.

SELECT COUNT(*) FROM ImplicitTran;

GO

INSERT INTO ImplicitTran VALUES (3, 'ccc');

GO

SELECT * FROM ImplicitTran;

GO

-- фиксация второй транзакции.

COMMIT TRANSACTION;

GO

SET IMPLICIT_TRANSACTIONS OFF;

GO

Соседние файлы в предмете Информатика