触发器

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

定义:

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

作用:

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

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

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

分类:

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

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

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

    • 记录数据库更改事件

二、创建DML触发器

  • INSERT 触发器

  • DELETE 触发器

  • UPDATE 触发器

  • 替代触发器

  • 允许使用嵌套触发器

  • 递归触发器

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

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

Create trigger employee_delete
on Employee
After Delete
AS
Begin
Declare @Dp varchar()
Select @Dp = DepartmentName
From Department D1, Deleted D2
Where D1.DepartmentID = D2.DepartmentID
If(@Dp = '人事部')
Begin
print '无法删除'
RollBack
End
End
  • 更新触发器(返回更新的记录)

Create trigger employee_update
on Stu_info
After Update
AS
Begin
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 Inserted
End --执行
Update Stu_info
Set S_name = '张三'
Where S_id =
  • Instead of (替代触发器)先判断,再操作

Create trigger employee_delete
on Employee
Instead of Delete
AS
Begin
Declare @Dp varchar()
Select @Dp = DepartmentName
From Department
If(@Dp = '人事部')
Begin
print '无法删除'
End
End
  • 禁止直接向表插入记录 操作

Create Trigger Insert_Forbidden
On Stu_Sum
After Insert
AS
Begin
Raiserror('不允许直接向该表插入记录, 操作被禁止', , )
RollBack Transaction
End
  • 触发器嵌套

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

  • 递归触发器

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

最新文章

  1. Module Zero学习目录
  2. 20160113第一个ANDRIOD开发日志
  3. Struts 笔记 内部资料 请勿转载 谢谢合作
  4. easyui validatebox 验证类型
  5. 7.openssl enc
  6. Java基础知识系列——Exception
  7. JAVA 中数据库连接的方法之一
  8. Web前端开发基础 第四课(CSS小技巧)
  9. Linux 下没有conio.h 已解决
  10. Scrum敏捷精要
  11. 【CodeForces 626E】Simple Skewness
  12. html的textarea控制字数小案例
  13. Redhat Linux 性能 - 内置的 sar
  14. 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据
  15. map与set的遍历
  16. Qt增加webp格式支持
  17. js的call,apply,bind的使用与区别
  18. 【CJOJ2512】gcd之和(莫比乌斯反演)
  19. 关于局域网 手机连接apache服务器报403forbidden错误参考如下2017.6.6
  20. python - psutil 系统信息模块

热门文章

  1. ps -aux 命令下的前几行内容解释 与 top命令下的前几行内容解释
  2. Ubuntu安装使用中的一些注意事项
  3. 1使用 vue-cli 搭建项目(cp)
  4. 程序集里包含多个版本dll引用 ,强制低版本到制定版本dll引用
  5. kafka重新启动时出现:found a corrupted index file due to requirement failed问题解决方法
  6. latex添加eps文档
  7. 自定义smokeping告警(邮件+短信)
  8. 【大数据】关于Kafka的进一步理解
  9. C#:文件/注册表/线程的操作
  10. 自定义样式,使用浏览器阅读epub格式的电子书