触发器是基于一个表创建的,但是可以针对多个表进行操作。所以触发器可以用来对表实施复杂的完整性的约束,当触发器所保存的数据发生改变时,触发器所保存的数据发生改变时,触发器被自动激活,从而防止对数据的不正确修改。

        下面对每个INSERT、DELETE、UPDATE触发器举一个小例子来加深理解:

INSERT触发器:

        INSERT触发器就是当对定义触发器的表执行INSERT语句时,就会调用的触发器,INSERT触发器可以用来修改,甚至拒绝接受正插入的记录。

建立一个学生信息管理的数据库,并且建立两个表,如下图所示:


ClassInfo表如下:


StudentInfo表如下:


新建查询,输入如下的代码:


create trigger T_addStudent
on StudentInfo
for insert
as 
  update ClassInfo set totalNum=totalNum+1
  where ClassNo = (select StuClass from inserted)

上面这段代码就是建立了一个插入触发器


如上图所示

1、  写明触发器的名称

2、  该触发器是在那个表改变的时候发生

3、  当这个表进行什么操作的时候发生

4、  发生上述操作之后还要进行怎样的操作。

 

这段代码的意思是:当在studentInfo表中添加一条记录的时候,就要更新ClassInfo中的TotalNum这一列,这一列的数据要增加1

 

下面我们验证一下:

输入下面的代码:

select totalNum from ClassInfo where ClassNo ='002'
insert into StudentInfo values('小明','003','002','男')
select totalNum from ClassInfo where ClassNo ='002'

执行之后将出现下面的结果:



        所以当我们想student表中插入一条记录的时候,Class表中的某一列就会加1.

DELETE触发器:

        当数据库运行DELETE语句时,就会激活DELETE触发器,DELETE触发器用于约束用户能够从数据库中删除的数据,因为这些数据中,有些数据是不希望用户轻易删除的。

        接下来,我们再建立一个表,并且输入一些数据,如下图所示:




新建查询,输入如下的代码:

create Trigger T_DELETETEACHERon TeacherInfoFor deleteas select TeacherName as 教师姓名,Sex, Age from deleted

输入下面的语句

delete from TeacherInfo where TeacherId = '001'


执行结果如图所示:



他会将我们刚刚删除的语句显示出来。

UPDATE 触发器:

当一个UPDATE语句在目标表上运行的时候,就会调用UPDATE触发器,这种类型的触发器专门用于约束用户能修改的现有的数据。

继续用上面的教师信息表,输入下面的代码


create trigger t_Update
on TeacherInfo 
for update 
as 
if (update(TeacherName)or update(sex))
begin 
	print'事物不能被处理,基本数据不能修改!'
	rollback transaction
end 
else 
	print'数据修改成功!'


接着我们更改一下第二条教师的信息

输入下面的代码:

Update TeacherInfo setTeacherName=’仙儿’ where TeacherID = ‘002’

将弹出下面的消息框:



Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐