Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы SQL-Курс лекций ИНТУИТ.docx
Скачиваний:
180
Добавлен:
16.09.2019
Размер:
554.17 Кб
Скачать

Удаление записи из рекурсивной структуры

ALTER TRIGGER emp_del

ON emp_mgr

FOR DELETE

AS

DECLARE @e CHAR(2), @m CHAR(2), @r INT

SELECT @e=emp,@m=mgr,@r=NoOfReports FROM deleted

IF @m IS NOT NULL

-- удаляется сотрудник, не являющийся директором

BEGIN

IF @r=0

-- удаляется сотрудник, у которого нет подчиненных

-- уменьшается число подчиненных у начальника

-- удаляемого сотрудника

UPDATE emp_mgr SET NoOfReports=

NoOfReports-1

WHERE emp=@m

ELSE

BEGIN

-- удаляется сотрудник, у которого есть подчиненные

-- переподчиним его подчиненных его начальнику,

-- т.е. начальником подчиненных удаляемого сотрудника

-- становится его начальник

UPDATE emp_mgr SET NoOfReports=

NoOfReports+@r-1

WHERE emp=@m

UPDATE emp_mgr SET mgr=@m

WHERE mgr=@e

END

END

ELSE

-- Правило 4

IF EXISTS(SELECT * FROM emp_mgr)

BEGIN

ROLLBACK TRAN

RAISERROR('НЕЛЬЗЯ УДАЛЯТЬ

ДИРЕКТОРА',16,10)

RETURN

END

Пример 15.3. Триггер для удаления записи из таблицы.

Попытка удаления записи о директоре будет отвергнута сервером:

DELETE FROM emp_mgr WHERE emp='a'

Server: Msg 50000, Level 16, State 10,

Procedure emp_del, Line 24

НЕЛЬЗЯ УДАЛЯТЬ ДИРЕКТОРА

В результате удаления рядового сотрудника с именем b его подчиненные e, f и g станут подчиненными сотрудника с именем a.

DELETE FROM emp_mgr WHERE emp='b'

Первоначальное содержимое таблицы emp_mgr изменится следующим образом:

emp mgr NoOfReports

-------------------------

a NULL 5

c a 1

d a 1

e a 0

f a 0

g a 0

i c 0

k d 0

Лекция 16: Транзакции и блокировки Приводится определение транзакции и ее свойств; представлены явные, неявные, автоматические и вложенные транзакции. Описываются средства обработки и управления транзакциями. Рассматривается механизм сохранения и отката транзакций. Вводится понятие параллельности в работе базы данных и методы управления параллельностью с использованием блокировок. Приводится описание уровней блокировок и уровней изоляции сервера. Выделяются основные и специальные типы блокировок.

Введение в транзакции

Концепция транзакций – неотъемлемая часть любой клиент-серверной базы данных.

Под транзакцией понимается неделимая с точки зрения воздействия на БД последовательность операторов манипулирования данными (чтения, удаления, вставки, модификации), приводящая к одному из двух возможных результатов: либо последовательность выполняется, если все операторы правильные, либо вся транзакцияоткатывается, если хотя бы один оператор не может быть успешно выполнен. Обработка транзакций гарантирует целостность информации в базе данных. Таким образом,транзакция переводит базу данных из одного целостного состояния в другое.

Поддержание механизма транзакций – показатель уровня развитости СУБД. Корректное поддержание транзакций одновременно является основой обеспечения целостности БД. Транзакции также составляют основу изолированности в многопользовательских системах, где с одной БД параллельно могут работать несколько пользователей или прикладных программ. Одна из основных задач СУБД – обеспечение изолированности, т.е. создание такого режима функционирования, при котором каждому пользователю казалось бы, что БД доступна только ему. Такую задачу СУБД принято называть параллелизмом транзакций.

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

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