【数据库视频】第十章 触发器

一、什么是触发器

  • 触发器是一个在修改指定表中的数据时执行的存储过程。

  • 通过事件进行触发而被执行的

优点:

  • 自动执行

  • 通过数据库中的相关表进行层叠更改。

  • 可以强制限制,比用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'

八、递归触发器

任何触发器都可以包含影响同一个表或另一个表的UPDATEINSERTDELETE语句。如果启用递归触发器选项,那么改变表中数据的触发器,通过递归执行就可以再次触发自己。在数据库创建时,默认情况下递归触发器选项是禁用的,但可以使用ALTER DATABASE语句来启用它。

操作:右击数据库——属性——选项——杂项——递归触发器已启用——True

递归触发器具有复杂特性,可以用它来解决诸如自引用关系这样的复杂关系。触发器最多只能递归16层。

猜你喜欢

转载自blog.csdn.net/hsm_Jasmine/article/details/84453593
今日推荐