mysql 触发器实现需求

本文介绍如何通过MySQL触发器实现特定条件下的数据备份功能,针对表中相同ID数据在特定时间间隔内的替换操作,确保数据一致性与完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

drop trigger if exists tg_bb_insert;  
delimiter $$  
create trigger tg_bb_insert  
before insert on ceshi  
FOR EACH ROW  
BEGIN  
    declare ishave int;  
    select 1 into ishave from ceshiyong where id = New.id AND backupTs > CURDATE() AND backupTs < DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND hour(now()) - hour(backupTs) < 2 order by backupTs desc limit 1; 
    if ishave is null then  
        insert into ceshiyong(id, count) values(NEW.id, New.count);  
    elseif ishave = 1 then  
        update ceshiyong set ceshiyong.count=New.count where id = New.id AND backupTs > CURDATE() AND backupTs < DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND hour(now()) - hour(backupTs) < 2 order by backupTs desc limit 1; 
    else  
        -- 理论上不会调到 --
        insert into ceshiyong(id, count) values(NEW.id, New.count);  
    end if;  
END$$  
delimiter ;   
折腾一个需求:表1在做replace数据的时候,相同ID的数据,这次replace距离上次超过2小时就执行一下备份,懒的不愿写代码的关系,用触发器实现,这尼玛也是一个悲催的过程,这条语句折腾了我4个多小时。。纪念

mysql> desc ceshi;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| count | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> desc ceshiyong;
+----------+-----------+------+-----+-------------------+-------+
| Field    | Type      | Null | Key | Default           | Extra |
+----------+-----------+------+-----+-------------------+-------+
| id       | int(11)   | YES  |     | NULL              |       |
| count    | int(11)   | YES  |     | NULL              |       |
| backupTs | timestamp | NO   |     | CURRENT_TIMESTAMP |       |
+----------+-----------+------+-----+-------------------+-------+
3 rows in set (0.01 sec)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值