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

2019-06-28 15:05:45 浏览数 (1)

问题描述:

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

a表:

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;

备份表:

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;

创建触发器:

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 ||

更新:

-- 创建修改触发器

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||

0 人点赞