SQL Server之触发器

第十章 触发器

概念;触发器是一个在修改指定表中的数据时执行的存储过程,经常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性或 一致性。由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以此确保数据的完整性。

使用:触发器不同于我们前面介绍的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而直接被调用。当对某一表进行诸如update,indert,delete这些操作时,sql server就会自动执行触发器所定义的sql语句,从而确保对数据的处理必须符合这些sql语句所定义的规则。
使用触发器优点

1.触发器自动执行,它们在表的数据做了任何修改后(比如手工输入或使用程序采集操作)之后立即激活。
2.触发器可以通过数据库中的相关表进行层叠更改。这比直接把代码写在前台的做法安全合理。
3.触发器可以强制限制,这些限制比check约束所定义的更复杂。与check约束不同的是,触发器可以引用其他表中的列。

触发器的种类
DDL触发器:DDL触发器当服务器或者数据库中发生数据定义语言(DDL)事件时将被调用。
DML触发器:DML触发器是当数据库服务器中发生数据操作语言(DML)事件时要执行的操作。包括三种:INSERT触发器,DELETE触发器,UPDATE 触发器

insert触发器的使用:实现当学生人数增加1,班级人数+1

create trigger T_addnum
on 学生信息1
for insert
as
	update 班级信息 set 班级人数=班级人数+1
	where 班级编号=(select  所属班级 from 学生信息1)

delete触发器的使用

create trigger T_DELETETRACHER
on 学生信息1
for delete
as
	select 姓名 as 被删除的学生姓名,性别,民族 from deleted

delete from 学生信息1 where 学号='3'

update触发器的使用
把学生的姓名看成时基础信息不可以修改,修改时弹出提示框‘事务不能被处理,基础数据不能修改!’,并且回滚事务,如果修改民族等信息,就提示事务修改成功。

create trigger T_UPDATE
on 学生信息1
for update
as
	if update(姓名)
begin
	print '事务不能被处理,基础数据不能修改!‘
end
else
	print'数据修改成功!'
update 学生信息1 set 民族='傣族' where 学号='5'

执行结果如下:
在这里插入图片描述
在这里插入图片描述
创建DDL触发器

create trigger T_notedelete
on database
for drop_table,alter_table
as
	print '事务不能被处理,基础数据表不能被修改和删除!'
	rollback

在这里插入图片描述

管理触发器:修改,删除,启动和禁用触发器
删除触发器: drop trigger trigger_name
禁用触发器:
alter table table_name(在哪个表上创建的触发器)
Disable trigger trigger_name
启动触发器:
alter table table_name(在哪个表上创建的触发器)
enable trigger trigger_name

触发器递归
任何触发器都可以包含影响同一个或另一个表的update,insert或delete语句,如果启用递归触发器选项,那么改变表中数据的触发器,通过递归执行可以再次触发自己。在数据库创建时,默认情况下递归触发器选项是禁用的,但可以使用alter database 语句来启用它。
在这里插入图片描述

发布了45 篇原创文章 · 获赞 10 · 访问量 6215

猜你喜欢

转载自blog.csdn.net/wtt15100/article/details/99712422