一、什么是触发器
-
触发器是一个在修改指定表中的数据时执行的存储过程。
-
通过事件进行触发而被执行的
优点:
-
自动执行
-
通过数据库中的相关表进行层叠更改。
-
可以强制限制,比用CHECK约束所定义的更复杂。而且不同的是,触发器可以引用其他表中的列。
种类:
DDL触发器 | 当服务器或者数据库中发生数据定义语言事件时将被调用 |
DML触发器 | 当服务器或者数据库中发生数据操作语言事件时将被调用:INSERT触发器、UPDATE触发器、DELETE触发器 |
二、创建INSERT触发器
语法格式:
-
CREATE TRIGGER trigger_name
-
ON { table | view }
-
{
-
{{FOR | AFTER | INSTEAD OF}
-
{[DELETE] [,] [INSERT] [,] [UPDATE]
-
AS
-
Sql_statement
-
}
-
}
三、创建DELETE触发器
例:
第一步:
CREATE TRIGGER T_DELETETEACHER
ON 教师信息
FOR DELETE
AS
SELECT 姓名 AS 比删除的教师姓名,性别,年龄,联系电话 from deleted
第二步:
DELETE FROM 教师信息 where 教师编号='2005001'
Select * from 教师信息
结果:没有查到对应数据
四、创建UPDATE触发器
例:
第一步:
CREATE TRIGGER T_UPDATE
ON 教师信息
For UPDATE
As
If (update(姓名) or update(性别))
BEGIN
Print '事务不能被处理,基础数据不能修改'
ROLLBACK TRANSACTION
END
ELSE
PRINT '数据修改成功'
第二步:
UPDATE 教师信息 set 姓名='李芳' where 教师编号='20020010'
结果:显示事务不能被处理,基础数据不能修改!
五、创建DDL触发器
语法格式:
-
CREATE TRIGGER trigger_name
-
ON { all SERVER | DATEBASE}
-
With encryption
-
{For | AFTER | {event_type}
-
As
-
Sql_STATEMENT
六、管理管理触发器
操作:展开具体的表——触发器——右击具体的触发器——修改
右击具体的触发器——禁用/启用
禁用触发器命令:
Alter table 员工信息
Disable trigger t_add
删除触发器命令:
DROP trigger t_add
七、嵌套触发器
例:
第一步:
create trigger t_del
on 新员工信息
for delete
AS
INSERT INTO 员工信息_1(员工编号,员工姓名,所在部门编号,所任职位,性别)
select 员工编号,员工姓名,所在部门编号,所任职位,性别
from deleted
第二步:
create trigger t_add
on 员工信息
for insert
as
update 部门信息 set 员工人数=员工人数+1
where 部门编号=(select 所在部门编号 from inserted)
第三步:
DELETE from 新员工信息 where 员工编号=14
Select 员工人数 from 部门信息 where 部门编号='10001'
八、递归触发器
任何触发器都可以包含影响同一个表或另一个表的UPDATE、INSERT或DELETE语句。如果启用递归触发器选项,那么改变表中数据的触发器,通过递归执行就可以再次触发自己。在数据库创建时,默认情况下递归触发器选项是禁用的,但可以使用ALTER DATABASE语句来启用它。
操作:右击数据库——属性——选项——杂项——递归触发器已启用——True
递归触发器具有复杂特性,可以用它来解决诸如自引用关系这样的复杂关系。触发器最多只能递归16层。