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

878

被折叠的 条评论
为什么被折叠?



