MySQL触发器

MySQL触发器

说明

触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器有利有弊,利在于在某些场景下使用非常便利,比如日志备份、状态修改等;弊在于使用不当容易造成性能问题甚至死锁。
本篇简单介绍基础写法,利弊可根据使用场景、参考其他文档。

介绍

主要功能:

1、在插入或更新数据之前对数据进行检查并验证删除和更新
2、充当数据过滤器,在插入或更新之前修改超出范围的数据
3、 修改 INSERT 、 UPDATE 和 DELETE 的行为方式
4、对于不支持外键的存储引擎,模仿外键的行为
5、提供日志记录功能
6、自动创建汇总表

触发器事件:

BEFORE 和 AFTER

BEFORE 和 AFTER 关键字是指触发器的激活时间,相对于数据修改语句( INSERT 、 UPDATE 或 DELETE )将更改写入底层数据库的时间。

BEFORE 关键字可使触发器在涉及的数据修改之前执行。可使用 BEFORE 触发器捕获无效数据条目并在写入表之前对其进行更正或拒绝。

– BEFORE INSERT :在添加新数据之前触发

– BEFORE UPDATE :在使用新数据更新(或覆盖)现有数据之前触发

– BEFORE DELETE :在删除数据之前触发

AFTER 关键字定义在数据修改成功后执行的触发器。可使用 AFTER 触发器记录或审计数据库中的数据修改。

– AFTER INSERT :在添加新数据之后触发

– AFTER UPDATE :在使用新数据更新(或覆盖)现有数据之后触发

– AFTER DELETE :在删除数据之后触发

编写举例

拷贝日志表到日志备份表

-- 自定义声明 /endAll/是结束,防止在命令行中,每行单独执行
delimiter /endAll/
DROP TRIGGER IF EXISTS  copySystemLogToBakTable;
CREATE TRIGGER copySystemLogToBakTable
-- insert之后触发执行
AFTER INSERT ON system_log FOR EACH ROW
BEGIN
-- new是新添加的记录标识
insert into system_log_bak(id, create_time, deleted, update_time, versions, ip, log_type, message, result, user_code, username) values (new.id, new.`create_time`, new.deleted, new.update_time, new.versions, new.ip,  new.log_type, new.message, new.result, new.user_code, new.username); 
END 
/endAll/
delimiter ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值