Лабораторные работы (А-13-07) / Авдиенков, Шутова / Отчет лаб 9
.docМосковский Энергетический Институт (ТУ)
Отчет по лабораторной работе №9
по предмету Базы данных
Выполнили: Шутова Екатерина
Авдиенков Олег
Преподаватель: Сидорова Наталья Петровна
Москва 2010
Задание 1
Создать триггер на проверку правильности ввода значений в одно из полей вашей информационной таблицы: «Код семейного положения» (значения от ‘0’ до ‘3’); значения этих полей должны быть заданы в отдельной таблице вашей БД;
СREATE TRIGGER sem_polozh_validation on bel
FOR INSERT, UPDATE AS
IF
(
SELECT
COUNT(*)
FROM inserted i, family f
WHERE
i.sem_polog_k=f.cod
)=0
SELECT 'ДОБАВЛЕННАЯ ЗАПИСЬ ОШИБОЧНА: значение поля «семейное положение» должно быть от 0 до 3'
INSERT INTO bel (nomer,fio,sem_polog_k) VALUES (523454, 'Иванов Иван Иванович',5)
Задание 2
Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD.
===========НА ДОБАВЛЕНИЕ===================
CREATE TRIGGER vuz_gorod_cascade_insert ON vuz_gorod
FOR INSERT AS
BEGIN
INSERT INTO vuz (cod,uch_zavedenie)
SELECT
cod_vuza
,nazvanie_vuza
FROM inserted
END
Пример:
INSERT INTO vuz_gorod (cod_vuza,nazvanie_vuza) VALUES (128999,'НАШ.ВУЗ')
ПРОВЕРКА ВСТАВКИ:
===========НА УДАЛЕНИЕ=========================
CREATE TRIGGER vuz_gorod_cascade_deleted ON vuz_gorod
FOR DELETE AS
BEGIN
DELETE vuz
FROM deleted,vuz
WHERE
vuz.cod=deleted.cod_vuza
END
Пример: DELETE FROM vuz_gorod WHERE cod_vuza=128999
ПРОВЕРКА:
===========НА ОБНОВЛЕНИЕ=======================
CREATE TRIGGER vuz_gorod_cascade_update ON vuz_gorod
FOR UPDATE AS
UPDATE v
SET v.cod = i.cod_vuza,
v.uch_zavedenie = i.nazvanie_vuza
FROM deleted d, vuz v, inserted i
WHERE ((d.cod_vuza = v.cod)
or (d.nazvanie_vuza = v.uch_zavedenie))
Пример: UPDATE vuz_gorod SET nazvanie_vuza='НАШ.ВУЗ' WHERE cod_vuza=129000
ПРОВЕРКА:
Задание 3
При добавлении поля nazvanie_goroda и cod_goroda в таблицу vuz_gorod, добавляется такая же запись в таблицу gorod.
CREATE TRIGGER gorod_cascade_insert ON vuz_gorod
FOR INSERT AS
BEGIN
INSERT INTO gorod (cod,nazvanie_goroda)
SELECT
cod_goroda
,nazvanie_goroda
FROM inserted
END
Пример:
INSERT INTO vuz_gorod (cod_vuza,nazvanie_vuza,cod_goroda,nazvanie_goroda,cod_stran,nazvanie_stran)
VALUES (128990,'НАШ.ВУЗ',800,'МЫШКИН',01,'РОССИЯ')