触发器练习一
有两个表,学生表和借书表。 用到的功能有:
1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。
创建学生表:
Create Table Student( --学生表
StudentID int primary key, --学号
)
创建借书表:
Create Table BorrowRecord( --学生借书记录表
BorrowRecord int identity(1,1), --流水号
StudentID int , --学号
BorrowDate datetime, --借出时间
ReturnDAte Datetime, --归还时间
)
创建触发器一:要求如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
分析:1.触发器要建在学生表,因为是学生表的学号变了导致借书表的学号也改变。
2.需要用到关联关系,这里就需要用到系统的两个临时表。
理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。
一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:
虚拟表Inserted 虚拟表Deleted
在表记录新增时 存放新增的记录 不存储记录
修改时存放用来更新的新记录 存放更新前的记录
删除时不存储记录 存放被删除的记录
创建触发器 T_student_insert
create trigger t_student_insert
after insert
as
if update(StudentID)
begin
update BorrowRecord set StudentID=i.StudentID from BorrowEecord r,deleted d,inserted i where r.StudentID=d.StudentID
end
创建触发器二:要求如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。
create trigger t_student_delete
after delete
as
begin
delete BorrowRecord from deleted d,BorrowRecord b where b.StudentID=d.StudentID