mysql中实现触发器修改数据就添加一条记录到另一张表

本文介绍如何在MySQL数据库中创建表并设置触发器,每当`tt`表中的`num`字段值变更时,自动插入一条记录到`log`表,记录受影响的行ID和创建时间。通过示例更新操作演示了触发器的工作效果。

创建一张表,填入数据:

CREATE DATABASE `test`;

USE `test`;

DROP TABLE IF EXISTS `tt`;

CREATE TABLE `tt` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `num` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

insert  into `tt`(`id`,`num`) values (1,4),(2,2),(3,3),(4,1);

创建一张日志表:
CREATE TABLE `log` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `effect` int(20) NOT NULL comment '受影响的行id',
  `created_time` datetime NOT NULL comment '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

创建触发器:
DELIMITER $$

USE `test`$$

DROP TRIGGER  `trigger_tt`$$

CREATE

    TRIGGER `trigger_tt` AFTER UPDATE ON `tt` 
    FOR EACH ROW BEGIN
	IF((old.num != new.num) OR (old.num IS NULL && new.num IS NOT NULL))
	THEN
	
	INSERT `test`.`log` (`effect`,`created_time`) VALUES (new.id,NOW());
	
	END IF;
    END;
$$

DELIMITER ;
修改数据num之后向log表中写入一条数据

执行下面的语句进行测试:
UPDATE tt SET `num`=2 WHERE id =1;
UPDATE tt SET `num`=4 WHERE id =1;
UPDATE tt SET `num`=1 WHERE id =4;

查看log表数据
id   effect   created_time
1    1        2020-05-09 13:46:19
2    1        2020-05-09 13:46:50
3    4        2020-05-09 13:47:22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

reg183

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值