首页 > 代码库 > SQL语句(二十一)—— 触发器(DML触发器)

SQL语句(二十一)—— 触发器(DML触发器)

触发器

一 、触发器概述(特殊的存储过程)

定义:

在修改指定表值的数据时执行的 存储过程. 不同的是 : 执行存储过程要使用EXEC语句来调用,而触发器的执行不需要使用EXEC语句来调用.

作用:

  1. 实现由主键和外键所不能保证的复制的参照完整性和数据的一致性

  1. 他能够对数据库中的相关表进行级联修改

  2. 提供比 CHECK约束 更复杂的数据完整性,并自定义错误信息。

分类:

  1. 数据操作语言触发器 DML

    • 数据库操作语言 : update,Delete

  2. 数据定义语言触发器 DDL

    • 记录数据库更改事件

二、创建DML触发器

  • INSERT 触发器

  • DELETE 触发器

  • UPDATE 触发器

  • 替代触发器

  • 允许使用嵌套触发器

  • 递归触发器

5.25: 在Employee表上创建一个名为Employee_deleted的触发器,其功能: 当对表进行删除时,首先检查员工是否为 ‘人事部‘员工,如果不是可以删除,否则撤销删除并显示‘无法删除‘

Create trigger employee_deleteon DepartmentAfter DeleteAS    Begin    Declary @x char(10)    Select @x = DepartmentName    --变量来自数据库,用from    From Department        if (@x = 人事部)        --没有就用变量    Begin            print 无法删除        RollBack             --撤销都是RollBack    EndEnd--执行Delete From Department Where Sname = 人事部
  • 先删除,再撤销

Create trigger employee_deleteon EmployeeAfter DeleteASBegin    Declare @Dp varchar(50)    Select @Dp = DepartmentName    From Department D1, Deleted D2    Where D1.DepartmentID = D2.DepartmentID    If(@Dp = 人事部)    Begin        print 无法删除        RollBack    EndEnd
  • 更新触发器(返回更新的记录)

Create trigger employee_updateon Stu_infoAfter UpdateASBegin    Declare @StuCount Int    Select @StuCount = Count(*)    From stu_info    Update Stu_sum     Set number = @StuCount    Select S_id As 更新前学生编号, S_name As 更新前学生姓名    From Deleted    Select S_id As 更新后学生编号, S_name As 更新后学生姓名    From InsertedEnd--执行Update Stu_infoSet S_name = 张三Where S_id = 1
  • Instead of (替代触发器)先判断,再操作

Create trigger employee_deleteon EmployeeInstead of DeleteASBegin    Declare @Dp varchar(50)    Select @Dp = DepartmentName    From Department    If(@Dp = 人事部)    Begin        print 无法删除    EndEnd
  • 禁止直接向表插入记录 操作

Create Trigger Insert_ForbiddenOn Stu_SumAfter InsertASBegin    Raiserror(不允许直接向该表插入记录, 操作被禁止, 1, 1)    RollBack TransactionEnd
  • 触发器嵌套

    • 服务器 - > 属性 -> 杂项 -> 允许触发器激发其他触发器 -> true

  • 递归触发器

    • 数据库 -> 属性 -> 选项 -> 杂项 -> 递归触发器已启用 -> true

 

 

 

SQL语句(二十一)—— 触发器(DML触发器)