SQL语句(二十一)—— 触发器(DML触发器)
2024-10-19 02:18:06
触发器
一 、触发器概述(特殊的存储过程)
定义:
在修改指定表值的数据时执行的 存储过程. 不同的是 : 执行存储过程要使用EXEC语句来调用,而触发器的执行不需要使用EXEC语句来调用.
作用:
实现由主键和外键所不能保证的复制的参照完整性和数据的一致性
他能够对数据库中的相关表进行级联修改
提供比 CHECK约束 更复杂的数据完整性,并自定义错误信息。
分类:
数据操作语言触发器 DML
数据库操作语言 : update,Delete
数据定义语言触发器 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
最新文章
- Module Zero学习目录
- 20160113第一个ANDRIOD开发日志
- Struts 笔记 内部资料 请勿转载 谢谢合作
- easyui validatebox 验证类型
- 7.openssl enc
- Java基础知识系列——Exception
- JAVA 中数据库连接的方法之一
- Web前端开发基础 第四课(CSS小技巧)
- Linux 下没有conio.h 已解决
- Scrum敏捷精要
- 【CodeForces 626E】Simple Skewness
- html的textarea控制字数小案例
- Redhat Linux 性能 - 内置的 sar
- 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据
- map与set的遍历
- Qt增加webp格式支持
- js的call,apply,bind的使用与区别
- 【CJOJ2512】gcd之和(莫比乌斯反演)
- 关于局域网 手机连接apache服务器报403forbidden错误参考如下2017.6.6
- python - psutil 系统信息模块
热门文章
- ps -aux 命令下的前几行内容解释 与 top命令下的前几行内容解释
- Ubuntu安装使用中的一些注意事项
- 1使用 vue-cli 搭建项目(cp)
- 程序集里包含多个版本dll引用 ,强制低版本到制定版本dll引用
- kafka重新启动时出现:found a corrupted index file due to requirement failed问题解决方法
- latex添加eps文档
- 自定义smokeping告警(邮件+短信)
- 【大数据】关于Kafka的进一步理解
- C#:文件/注册表/线程的操作
- 自定义样式,使用浏览器阅读epub格式的电子书