触发器(trigger)
2021-04-16 22:49:30 0 举报
AI智能生成
🔆MySQL数据库性能优化
作者其他创作
大纲/内容
触发器(trigger)
是一种特殊类型的存储过程
不同于存储过程
主要是通过事件触发而被执行的
不是主动调用执行
存储过程需要主动调用才能执行
是指事先为某张表绑定一段代码
当表中的某些内容发生改变(增、删、改)的时候,系统会自动触发代码并执行
作用
可在写入数据前,强制检验或者转换数据(保证护数据安全)
触发器发生错误时,前面用户已经执行成功的操作会被撤销,类似事务的回滚
创建
基本语法
on 表 for each:触发对象
触发器绑定的实质是表中的所有行
因此当每一行发生指定改变时,触发器就会发生
触发时间
当 SQL 指令发生时,会令行中数据发生变化,而每张表中对应的行有两种状态
数据操作前
before:表中数据发生改变前的状态
数据操作后
after:表中数据发生改变后的状态
如果 before 触发器失败或者语句本身失败,将不执行 after 触发器(如果有的话)
触发事件
触发器是针对数据发送改变才会被触发
对应的操作只有
INSERT
insert
DELETE
delete
UPDATE
update
注意事项
在 MySQL 5 中
触发器名必须在每个表中唯一
但不是在每个数据库中唯一
即同一数据库中的两个表可能具有相同名字的触发器每个表的每个事件每次只允许一个触发器
每个表最多支持 6 个触发器,before/after insert、before/after delete、before/after update
应用
触发器针对的是数据库中的每一行记录
每行数据在操作前后都会有一个对应的状态
触发器将没有操作之前的状态保存到 old 关键字中
触发器将操作后的状态保存到 new 关键字中
语法
old/new.字段名
需要注意的是,old 和 new 不是所有触发器都有
需要记录,哪张表的哪条数据(哪个字段,定制功能)被谁在什么时候进行了什么类型的操作
同时记录 old_value 与 new_value
子主题
-- 测试新增触发器insert into demo_tbl (info) values ('新增触发器测试 1');insert into demo_tbl (info) values ('新增触发器测试 2');insert into demo_tbl (info) values ('新增触发器测试 3');insert into demo_tbl (info) values ('新增触发器测试 4');
-- 测试更新的触发器update demo_tbl set info = '更新触发器测试' where id = 3;
-- 测试删除数据的触发器delete from demo_tbl where id = 4;
0 条评论
回复 删除
下一页