mysql触发器-监控表字段更新
最近想实现⼀个监控mysql表的某个或者某⼏个字段值的变化,当监控字段的值发⽣变化时,将原有值和更新值保存下来。想实现这个功能受限想到的就是触发器,mysql的触发器块很久没碰过了,重新拎起来还是免不了查些资料什么的。花了点时间搞定了这个触发器。这⾥写个⼩例⼦来记录下mysql触发器编写的过程。
mysql触发器格式如下:
CREATE TRIGGER触发器名触发器时间触发事件
ON表名FOR EACH ROW
BEGIN
执⾏语句
END
注:触发器名 - 触发器的名称
触发器时间 - 触发器触发的时机,值为BEFORE或AFTER
触发器事件 - 引起触发器触发的事件,值为INSERT或UPDATE或DELETE
表名 - 触发触发器的表名,即该触发器是建⽴在那张表上⾯的
执⾏语句 - 即为触发器出发后执⾏的操作
案例:监控表tp_temp的mobile字段,当mobile字段发⽣变化时,tp_temp_2建⽴更新记录:将更新前的mobile值和更新后的mobile值记录到tp_temp_2表的mobile1和mobile2中
tp_temp_1表:
CREATE TABLE `tp_temp_1` (
`p_id` varchar(40) DEFAULT NULL COMMENT 'ID',
`name` varchar(50) DEFAULT NULL COMMENT '姓名',
`sex` char(1) DEFAULT NULL COMMENT '性别(1:男,2:⼥)',
`mobile` varchar(12) DEFAULT NULL COMMENT '⼿机',
`addr` varchar(100) DEFAULT NULL COMMENT '地址'
)
tp_temp2表:
CREATE TABLE `tp_temp_2` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name1` varchar(50) DEFAULT NULL COMMENT 'old姓名',
`name2` varchar(50) DEFAULT NULL COMMENT 'new姓名',
`sex1` char(1) DEFAULT NULL COMMENT 'old性别',
`sex2` char(1) DEFAULT NULL COMMENT 'new性别',
`mobile1` varchar(12) DEFAULT NULL COMMENT 'old⼿机',
`mobile2` varchar(12) DEFAULT NULL COMMENT 'new⼿机',
`addr1` varchar(100) DEFAULT NULL COMMENT 'old地址',
`addr2` varchar(100) DEFAULT NULL COMMENT 'new地址',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
)
创建触发器trigger_test:
-- DELIMITER $$
-- CREATE
-- TRIGGER `my db`.`trigger_test` BEFORE UPDATE -- mydb为数据库名
-- ON `my db`.`tp_temp`
-- FOR EACH ROW BEGIN
-
- SET @oldMobile = (bile FROM tp_temp c WHERE c.list_id=new.list_id LIMIT 1);
-- bile <> @oldMobile THEN
-- INSERT INTO tp_temp2(list_id,mobile1,mobile2,create_time)VALUE (new.list_id,@bile,SYSDATE());
-- END IF;
-- END$$
-- DELIMITER ;
DELIMITER $$
USE `krchain_db`$$
DROP TRIGGER /*!50032 IF EXISTS */ `trigger_tes01`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `trigger_tes01` AFTER INSERT ON `tp_temp_2`
FOR EACH ROW BEGIN
DECLARE v_str VARCHAR(255) CHARACTER SET utf8;
DECLARE v_str2 VARCHAR(255) CHARACTER SET utf8;
SELECT mobile INTO v_str FROM inserted;
SET v_str2 = 'java -jar d:\socketTest1.jar ' + v_str;
-- p_cmdshell v_str2;
p_cmdshell 'bcp p_temp_2 out d:\tt.txt -c -t ,-U root -P 1qaz2wsx' END;
null官方更新地址$$
DELIMITER ;
以上。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论