数据库(5)--触发器的定义

时间:2023-02-27 19:00:03


一、学习目标

熟悉触发器的定义和使用

二·、实验环境 

Windows 11

Sql server2019

三、实验内容

学生(学号,年龄,性别,系名)

课程(课号,课名,学分,学时)

选课(学号,课号,成绩)

(1)建立学生表的insert触发器,若向学生表中插入一条记录,则自动向选课表中插入一行,令该生选一门选修人数最多的课。

(2)在建立学生表的delete触发器,若选课表中该生有选课记录,则拒绝删除,要求在删除学生信息同时,将相关表中的信息全部删除。

四、SQL代码

create trigger trigger_1
on stu
for insert
as
declare
@sno char(10),
@cnum char(10),
@sname char(10)
select @sno=(select sno from inserted)
select @sname=sname from inserted
select top 1 @cnum=cnum from(select cnum,count(*) as total from xe group by cnum)xe
insert into xe values(@sno,@cnum,0,@sname);
增加一行数据:
insert into stu (sno,sage,ssex,sdept,sname)
values(200511811,20,'男','计算机','张楚岚')

初始数据:

数据库(5)--触发器的定义

修改后的数据:

数据库(5)--触发器的定义

create trigger de
on stu
after delete
as
declare @sno char(10)
set @sno=(select sno from deleted)
if @sno in (select sno from xe)
print'请先删除相关记录'
delete from xe where sno=(select sno from deleted)
delete from stu where sno= (select sno from deleted)
print'删除完成'
删除语句:
delete from stu where sno=200511811
select *from stu
select * from xe

数据库(5)--触发器的定义

五、小结 

        触发器(rigger)是用户定义在关系表上的一类由事件驱动的特殊过程。一旦定义,触发器将被保存在数据库服务器中。任何用户对表的增、删、改操作均由服务器自动激活相应的触发器,在关系数据库管理系统核心层进行集中的完整性控制。触发器类似于约束,但是比约束更加灵活,可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力。

        在同一个事务中的不同执行语句,如果后面语句中的操作触发了相应表的触发器,则在触发器内可以查看前面语句执行后的结果列表的内容,所以,在使用触发器的时候,对事物中多条语句的操作的顺序是要考虑清楚的。如果我们使用触发器+数据表的形式来对数据进行一些统计性的操作的时候,我们在保证触发器逻辑完整性的前提下,最好能通过数据库任务的方式来定时进行检查,但对于人为的数据库操作有时却是无能为力的,所以,为了避免这样的错误发生,有必要对统计结果做定期的校验,保证数据的正确性。