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

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

ALTER TRIGGER emp_delON emp_mgrFOR DELETEASDECLARE @e CHAR(2), @m CHAR(2), @r INTSELECT @e=emp,@m=mgr,@r=NoOfReports FROM deletedIF @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. Триггер для удаления записи из таблицы. (html, txt)

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

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 5c a 1d a 1e a 0f a 0g a 0i c 0k d 0

 

Лекция: Транзакции и блокировки

 

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

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

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

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

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