数据库完整性----触发器
来源:互联网 发布:淘宝中上传宝贝到仓库 编辑:程序博客网 时间:2024/06/03 17:08
触发器是一种特殊的存储过程,当用户对表中的数据进行update、insert或delete操作时自动触发执行,通常用于保障业务规则和数据完整性
触发器的常用功能
- 完成比约束更复杂的数据约束
- 检查所做的sql是否允许
- 调用更多的存储过程
- 防止数据表结构更改或数据表被删除
- 修改其他数据表的数据
- 发送sql mail
- 返回自定义的错误信息
创建
常用DML触发器,即数据库中发生数据操作语言(insert、update、delete)事件时执行的存储过程
create trigger 触发器名称on {表名 | 视图名}{ for| after| instead of } { [insert] [ , ] [delete] [ , ] [update] }as sql 语句
- 一个表上可以建立多个触发器
- 对于after型触发器,可以在同一种操作上建立多个触发器;对于instead of型触发器,在同一种操作上只能建立一个触发器
- 不允许在触发器中创建和更改数据库以及数据库对象的语句、以及多有的drop语句
后触发型触发器
使用for或after选项定义的触发器
执行过程如下
1. 执行到引发触发器执行的语句
2. 执行该语句
3. 执行触发器
create trigger basspayon 雇员 after inster,updateasif exists( select * from 雇员 a,工作 b on a.工作编号=b.工作编号 where 工资 between 最低工资 and 最高工资)beginprint'插入或更新数据出错'rollback //撤销已执行的操作end
触发器和引发触发器执行的操作共同构成了一个事务,事务的开始是引发触发器执行的操作,事务的结束是触发器的结束
工作原理
记录改变后才会被激活执行,它主要用于记录改变后的处理和检查,一旦发现错误,可用rollback transaction语句回滚本次操作
前触发型触发器
使用instead of选项定义的触发器
执行过程如下:
1. 执行到引发触发器执行的语句
2. 执行触发器(执行触发器而不是执行引发触发器的SQL语句,从而代替引发语句的操作)
create trigger floaypayon 雇员instead of updateasif not exists( select * from inserted where 浮动工资> 工资*0.3)update 雇员 set 浮动工资=( select 浮动工资 from inserted i where 雇员。雇员编号= i.雇员编号)elseprint'浮动工资不能高于工资的30%'//限制不能将“浮动工资”列的值改为超过该雇员工资的30%,如果违反约束给出提示信息:“浮动工资不能高于工资的30%”
通常在以下几种情况下,建议使用instead of触发器
1. 数据库中的数据禁止修改,此时可以使用该处发起来跳过update修改记录的SQL语句
2. 有可能要回滚修改的SQL语句:避免在修改数据后再回滚,减少服务器负担
3. 在视图中使用触发器,因为after触发器不能再视图中使用
4. 自定义修改数据,控制数据的修改方式和流程
工作原理
在记录变更之前发生,并不去执行原来的SQL语句里的操作,而去执行触发器本身所定义的操作
触发器的删除
drop trigger 触发器名
注意事项
- 一个表可以有多个触发器,但一个触发器只能对应一个表,但可以引用数据库以外的对象
- 同一个数据表中,对每个操作而言,可以建立多个after触发器,但instead of 触发器只能创建一个
- 对某个操作,既建了after触发器,又设置了instead of触发器,instead of触发器一定会激活,after触发器不一定会被激活
1 0
- 数据库完整性----触发器
- 【数据库基础】数据库完整性控制-触发器
- 数据库 - 触发器与域中的完整性限制
- 数据库的完整性约束及触发器
- SQL Server触发器在保持数据库完整性中的应用
- 触发器在保证数据库完整性和一致性中的应用
- SQLServer触发器保持数据库完整性的实际应用
- 数据库完整性
- 数据库完整性
- 数据库完整性
- 数据库完整性
- 数据库 完整性
- 数据库完整性
- 数据库完整性
- 数据库完整性
- 数据库完整性
- 数据库--完整性
- 数据库完整性
- 2212: [Poi2011]Tree Rotations
- Android 切换显示各种不同的view
- scrollview嵌套recyclerview时滑动没有惯性的解决
- NFD在android上的移植过程(1):安装依赖库
- Android手机扫描识别银行卡技术
- 数据库完整性----触发器
- MySQL 数据类型
- 从0开始搭建SVN服务器
- IOS移动开发 应用程序互相切换问题
- 数据库设计
- JVM架构解析
- [leetcode]463. Island Perimeter
- java8大放异彩(一)
- 数据库恢复技术