1. 程式人生 > 其它 >實驗8 綜合實驗

實驗8 綜合實驗

實驗名稱 實驗8 綜合實驗 日期 2020 6 19

一、實驗目的:

(1)理解觸發器的用途、型別和工作原理

(2)掌握利用T-SL語句建立和維護觸發器的方法

(3)掌握利用企業管理器建立、維護觸發器的方法

二、實驗環境:

PC + Windows + SQL Server

三、實驗內容

建立 after/觸發器

(1)建立一個在插入時觸發的觸發器sc_insert,當向sc表插入資料時,須確保插入的學號己在 Student表中存在,並且還須確保插入的課程號在 Course表中存在:若不存在,則給出相應的提示資訊,並取消插入操作,提示資訊要求指明插入資訊是學號不滿足條件還是課程號不滿足條件(注: Student表與sc表的外來鍵約束要先取消)。

if exists(select name from sysobjects where name='sc_insert' and type='tr')

drop trigger sc_insert

go

create trigger sc_insert

on SC

after insert

as

if not exists(select * from Student,inserted where Student.Sno=inserted.Sno)

 begin

 print '插入資訊的學號不在學生表中!'

 if not exists(select * from Course,inserted where Course.Cno=inserted.Cno)

 print '插入新的課程號不在課程表中!'

 rollback

 end

else

 begin

 if not exists(select * from Course,inserted where Course.Cno=inserted.Cno)

 begin

 print '插入資訊的課程號不在課程表中!'

 rollback

 end

 end

(2)為Course表建立一個觸發器Course_del,當刪除了Course表中的一條課程資訊時,同時將表sc表中相應的學生選課記錄刪除掉。

if exists(select name from sysobjects where name='Course_del' and type='tr')

drop trigger Course_del

go



create trigger Course_del

on Course

after delete

as

if exists(select * from SC,deleted where SC.Cno=deleted.Cno)

begin

 delete from SC

 where SC.Cno in(select Cno from deleted)

end

(3)在Course表中新增一個平均成績avg_Grade欄位(記錄每門課程的平均成績),建立一個觸發器 Grade_modify,當SC表中的某學生的成績發生變化時,則Course表中的平均成績也能及時相應的發生改變。

alter table Course

add avg_Grade smallint;

update Course

set avg_Grade=(select avg(Grade) from SC where SC.Cno=Course.Cno)



if exists(select name from sysobjects where name='Grade_modify' and type='tr')

drop trigger Grade_modify

go



create trigger Grade_modify

on SC

after update

as

if update(Grade)

begin

 update Course

 set avg_Grade=(select avg(Grade) from SC where Course.Cno=SC.Cno group by Cno)

 end

(4)測試以上3個觸發器

sc_insert

Course_del

Grade_modify

四、心得體會(150字以上)

通過此次實驗,理解了觸發器的用途、型別和工作原理,掌握瞭如何利用T-SL語句建立和維護觸發器的方法,掌握了利用企業管理器建立、維護觸發器的方法。

觸發器是使用者定義在關係表上的一類由事件驅動的特殊過程,也是一種保證資料完整性的方法。觸發器實際上是一類特殊的儲存過程,其特殊性表現在一旦定義,無須使用者呼叫,任何對錶的修改操作均由伺服器自動**相應的觸發器。觸發器的主要作用是實現主鍵和外來鍵不能保證的複雜的參照完整性和資料一致性。