Программирование >>  Реализация баз данных 

1 ... 91 92 93 [ 94 ] 95 96 97 ... 162


цедуру, которая одновременна ется триггером на обновление и добавление. Порядок этих событий в определении триггера не ограничен. Подробнее о синтаксисе триггеров рассказано в занятии 2.

Есть определенные ельстза, при которых событие модификации или удаления данных не вызывает срабатывание ствующего триггера. Например, при исполнении оператора TRUNCATE ТАВЕЕ не происходит срабатывание DEEETE-триггера. Важной особенностью триггеров является автоматический откат неудачных транзакций. Поскольку TRUNCATE TABLE - непротоколируемое тие, его откат невозможен и оно не вызывает срабатывание DELETE-триггера, Кроме того, исполнение оператора WRITETEXT не вызывает срабатывания INSERT- и UPDATE-триггеров.

Исполнение триггеров

Триггер, запущенный в результате добавления или обновления табличных данных, СОХраняет новые или модифицированные данные в таблице под названием а триггер, сработавший при удалении данных из таблицы, сохраняет удаленные данные в таблице Deleted. С помошью команд ct-SQL выполняются запросы к эти щам которые существуют в памяти. Эта особенность важна для функционирования большинства триггеров: прежде чем внесенные изменения будут зафиксированы, задача триггера (например, модификация значения в связанной Таблице) сравнивает данные таблиц Inserted или Deleted с данными модифициронанной таблицы. Используя данные из таблиц Inserted или триггер может откатить транзакцию, если этого требуют бизнес-правила. В SQL Server 2000 существуют дна класса триггеров: INSTEAD OF и AFTER. Первые

выполняются в обход действий, вызывавших их срабатывание, заменяя эти действия. НаПример, обновление таблицы, в которой есть триггер INSTEAD OF, вызовет срабатывание этого триггера. В результате вместе атора обновления выполняется код триггера. Это позволяет размешать в триггере сложные операторы обработки, которые дополняют действия оператора, модифицирующего таблицу.

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

Между триггерами этих двух классов твует ряд важных отличий, показанных в

таблице.

Характеристика

INSTEAD ОГ-трштер

АГГЕН-триггер

Объект, которому можно привязать триггер

Допустимое число триггеров

Таблица или представление. Триггеры иатпч.!: тавлению, расширяют список типов обновления, которые может поддерживать представление

В таблице или представлении допускается не одного

триггера в расчете на одно действие. Можн .еля11-, представления для других представлений, каждое со своим собственным INSTEAD OF-триггером

Таблица.

AFTER-триггеры сраба-при

ции данных в таблице в ответ на модификацию

цредстааления К таблице можно привязать несколько AFTER-

триггеров



Занятие 1

Основные сведени!! о триггерах

Характеристика

INSTEAD OF-триггер

АГГЕК-триггер

Порядок Поскольку в таблице ил став-

исполнения допускается не больше одного

такого триггера в расчете на одно событие, порядок не имеет смысла

Можно определять триг-

срабатывающие первым и

Для этого служит системная хранимая процедура sp settriggerorder. Порядок срабатывания других триггеров, привязанных к случаен

К таблице разрешено привязывать триггеры обоих классов. Если в таблице определе-ограничения и триггеры обоих классов, то первым из них срабатывает триггер INSTEAD OF, затем обрабатываются отраничения и последним срабатывает ЛРТЕК-трпггер. При нарушении ограничения выполняется откат действий INSTEAD OF-триггера. Если нарушаются ограничения или происходят какие-либо другие события, не позволяющие модифицировать таблицу, AFTER-триттер не исполняется.

Как и в случае хранимых процедур, глубина вложенности триггеров достигает 32 уровней, также возможно рекурсивное срабатывание триггеров. Чтобы получить более подробные сведения о вложенности и рекурсии триггеров, найдите в справочнике по языку Transacl-SQL в SQL Server Books Online страницу, озатлавленную СВЕАТЕ TRIGGER .

Упражнение. Применение ограничений каскадной ссылочной целостности

В этом упражнении вы добавите ограничения каскадной ссылочной целостности к базе данных BookShopDB. Эта новая функция SQL Server 2000 заменила триггеры при выполнении каскадного удаления и обновлении внешних ключей.

ссылочной целостиости для ключа TitlelD из базы данных

Настройка каскадной BookShopDB

Откройте Query Analyzer и подключитесь к локальному серверу. На панели Editor в окне Query введите и исполните следующий код:

USE BookShopDB

INSERT Orders (CustomerlD, EmployeelD, Amount, OrderDate, DeliveryDate,

PaymentiD,

tatusID)

VALUES no, 1, 30. GetDateO, DATEADD(day, 5, GetDateO). 1, 1} INSERT BookOrders (tltleid, orderid) VALUES (aust1234-, 3)

Первый оператор INSERT добавляет новый заказ в таблицу Orders. Значения OrderDate и DeliveryDate предоставляют функции. Первая возвращает

сегодняшнюю дату (установленную на компьютере). Вторая функция прибавляет 5 дней к значению функции GetDate. Второй оператор INSERT добавляет запись в таблицу BookOrders. Эти операторы добавления имеют большое значение для проверки действия эффекта каскадной ссылочной целостности на внешний ключ TitlelD в таблице BookOrders.



27 Глава 9

3. На панели Editor в окне Query и исполните код:

UPDATE Books

SET . . .. = Аизлгзб ,

WHERE TitlelD = AUSTISS

На вкладке Message панели Results выводится сообщение об ошибке: Servers 547, Level 16, State 1, Line 1

UPDATE statement conflicted w:th COLUMN REFERENCE constraint titleid.fk. The conflict occurred in database BookShopDB . table fiookAuthors, column TitlelD.

The statement has been termihit&d.

Причиной такого сообщения является нарушение foreign key

при попытке изменения значения первичного ключа TitlelD в таблице Books.

4. На панели Editor в окне Query введите и исполните следующий код: ALTER TABLE BookAuthors DROP CONSTRAINT l,ltleid fk

Этот оператор ALTER TABLE удаляет из таблицы BookAuthors ограничение

5. На панели Editor в окне Query введите и исполните даю щи ii код: ALTER TABLE BookAuthors

ADD CONSTRAINT titleid fk FOREIGN KEY (TitlelD) REFERENCES Books (TitlelD)

ON UPDATE CASCADE ON DELETE CASCADE

Этот оператор ALTER TABLE добавляет каскадную ссылочную целостность к ограничению foreign key ltitleid fl<) в таблице BookAutliors. При обновлении первичного ключа TitlelD из таблицы Books будет изменен и соответствующий внешний ключ в таблице BookOrders. Ограничение titieitLfk делает таблицу Books родительской для таблицы BookAuthors. ,

6. Исполните код Transact-SQL.

7. На панели Editor в окне Query введите и исполните следующий код:

UPDATE Books

SET TitlelD ДиЗТТгЗб WHERE TitlelD = AUST1234

Выводится об ошибке из-за нарушения ограничения в таблице

BookOrders при попытке изменения значения первичного ключа TitlelD в таблице Books.

8. На панели Editor в окне Query введите и исполните следующий код:

ALTE BLE BookOrders DROP CONSTRAINT titleid2 fk ALTER TABLE BookOrders ADD CONSTRAINT titleid2 fk FOREIGN KEY (TitlelD) REFERENCES Books (TitlelD)

ON UPDATE CASCADE ON DELETE C/\SCADE



1 ... 91 92 93 [ 94 ] 95 96 97 ... 162

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика