目 录CONTENT

文章目录

mysql触发器

在水一方
2022-07-27 / 0 评论 / 0 点赞 / 556 阅读 / 1,397 字 / 正在检测是否收录...

前言

近期遇到需要写触发器的需求,需要将A表中数据修改的信息,添加到B表中,之前比较少写,记录一下学习到的一些知识点

触发器的好处

使用触发器,把更改(如果需要,甚至还有之前和之后的状态)记录到另一个表非常容易。

触发器的简介

每个表最多支持6个触发器,单一触发器不能与多个事件或多个表关联,所
以,如果你需要一个对INSERT和UPDATE操作执行的触发器,则应该定义
两个触发器。现在触发器只支持行级触发,不支持语句级触发,触发器不能更新或覆盖。为了修改一个触发器,必须先删除它,然后再重新创建。

触发器关键字

在触发器中我们经常会用到NEW和OLD这两个关键字下面来分别了解一下

  • NEW是指刚刚插入到数据库的数据表中的一个域,。比如在一个insert触发器中我用到了NEW那他的意思就是说,要使用刚刚插入到数据表的某个值,要使用具体的某一个值的话需要这样子写:NEW.字段名(NEW.username)这样子就获取到了刚刚插入到数据表中的一个字段的值!!

  • OLD,OLD是在delete触发器中有用的,意思是说我要删除一条数据,但是在触发器中要用到之前的那个数据,那么我就可以通过OLD来获取了!比如我删除了一条数据,里面包含一个email,现在我在触发器的内部sql中要用就可以这样子写:OLD.email!

image.png

创建触发器demo

CREATE TRIGGER  触发器名称 after INSERT
on  表名  FOR EACH ROW
BEGIN
INSERT INTO sys_sync_info_log VALUES (null,OLD.sync_table_name, OLD.gmt_create, OLD.gmt_modified, OLD.version,OLD.total);
END

CREATE TRIGGER  modelparamtrigger  after INSERT
on  XXX_sys_model_param  FOR EACH ROW
BEGIN
INSERT INTO XXX_sys_model_param_backend VALUES (new.id, new.cell_id, new.name, new.relation_row, new.relation_column, new.column_width, new.type, new.param_type, new.is_validation, new.cell_column_number, new.cell_row_number, new.cell_formula, new.background_color, new.row_height, new.gmt_create, new.gmt_modified);
END

注意点

MySQL触发器中不支持CALL语句。这表示不能从触发器内调用存储过程。所需的存储过程代码需要复制到触发器内

思考过程

一开始接到需求时,我想的是只要知道用户执行修改的sql语句拿到修改的数据的id,然后查询到数据记录进行保存,在这个过程中了解到了binlog这部分内容点,但是对这部分内容点比较陌生,后面通过触发器关键字解决了这个问题,但是还是需要扩展一下binlog相关的知识点

MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的

0

评论区