使用mysql触发器新增或修改一个表后,触发到另一个表

简介 问题描述:在工作中,有时候,我们需要备份一个表。或者是在向一张表中添加一条数据后,另一张同结构的表也要添加用于备份。如下:a表:DROPTABLEIFEXISTS`t_a`;CREATETABLE`t_a`( `a_ID`varchar(50)NOTNULLCOMMENT'流水编号', `a_ACCOUNT_ID`int(8)DEFAULTNULLCOMMENT

问题描述:

在工作中,有时候,我们需要备份一个表。或者是在向一张表中添加一条数据后,另一张同结构的表也要添加用于备份。如下:

a表:

82f47ef8e52e72325e06e44085527a47.png

DROP TABLE IF EXISTS `t_a`;

CREATE TABLE `t_a` (

 `a_ID` varchar(50) NOT NULL COMMENT '流水编号',

 `a_ACCOUNT_ID` int(8) DEFAULT NULL COMMENT '外键',

 `a_TYPE` varchar(2) DEFAULT NULL COMMENT '类型:01:增 02:减',

 `a_AMOUNT` int(8) DEFAULT NULL COMMENT '收支额',

 `a_REASON` varchar(100) DEFAULT NULL COMMENT '收支原因',

 `a_CREATETIME` varchar(20) DEFAULT NULL COMMENT '时间',

 `a_STATUS` varchar(2) DEFAULT '01' COMMENT '00:已处理 01:未处理',

 PRIMARY KEY (`a_ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

备份表:

e299d56d6aee12f438cb8748df3e7d70.png

DROP TABLE IF EXISTS `t_a_history`;

CREATE TABLE `t_a_history` (

 `b_ID` varchar(50) NOT NULL COMMENT '流水编号',

 `b_ACCOUNT_ID` int(8) DEFAULT NULL COMMENT '外键',

 `b_TYPE` varchar(2) DEFAULT NULL COMMENT '类型:01:增 02:减',

 `b_AMOUNT` int(8) DEFAULT NULL COMMENT '收支额',

 `b_REASON` varchar(100) DEFAULT NULL COMMENT '收支原因',

 `b_CREATETIME` varchar(20) DEFAULT NULL COMMENT '收支时间',

 `b_STATUS` varchar(2) DEFAULT '01' COMMENT '00:已处理 01:未处理',

 PRIMARY KEY (`FLOW_ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建触发器:

67d6fbba1b98d6f59a53b99c87284584.png

delimiter ||

DROP TRIGGER IF EXISTS a_afterinsert_on_ahistory||

CREATE TRIGGER a_afterinsert_on_ahistory

AFTER INSERT ON a_flow

FOR EACH ROW

BEGIN

    insert into a_flow_history(b_ID,b_ACCOUNT_ID,b_AMOUNT,b_REASON,b_CREATETIME,b_STATUS)

values(new.a_ID,new.a_ACCOUNT_ID,new.a_AMOUNT,new.a_REASON,new.a_CREATETIME,new.a_STATUS);

END||

delimiter ;

需要注意:

必须声明:

delimiter ||

更新:

9b28f72389a643af9ce71ab52e958e21.png

-- 创建修改触发器

DELIMITER || -- 声明结束符

DROP TRIGGER IF EXISTS a_afterupdate_on_ahistory||

CREATE TRIGGER a_afterupdate_on_ahistory

AFTER UPDATE ON a_flow

FOR EACH ROW

BEGIN

UPDATE a_flow_history SET a_STATUS =new.a_STATUS

WHERE FLOW_ID=new.FLOW_ID;

END||


Top Top