Mysql 触发器

本文介绍了一个MySQL触发器的设计与实现细节,该触发器用于在插入新任务后同步更新当日的任务日志表。具体包括:1. 插入新记录到任务流程表时触发;2. 检查并确保每分钟内的任务日志唯一;3. 实现新增任务的日志同步或累计更新。

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

CREATE TRIGGER insertToTbdaylogger AFTER INSERT ON tbtaskflow 

FOR EACH ROW

BEGIN
   DECLARE i_temp int;
        select count(*) into i_temp from tbdaylogger where  insertTimes>=DATE_SUB(NOW(),INTERVAL CONCAT("'",MINUTE(NOW()),":",SECOND(NOW()),"'") MINUTE_SECOND)
             and insertTimes < NOW() and taskid=NEW.taskid;
   if i_temp = 0 then
        insert into tbdaylogger(taskid,totalSuccessNum,totalSuccessFlow,totalErrorFlow,totalErrorNum) 
                        values(NEW.taskid,NEW.totalSuccessNum,NEW.totalSuccessFlow,NEW.totalErrorFlow,NEW.totalErrorNum);
   else 
        update tbdaylogger set 
        totalSuccessNum=CAST(totalSuccessNum AS UNSIGNED)+CAST(NEW.totalSuccessNum AS UNSIGNED),
        totalSuccessFlow=CAST(totalSuccessFlow AS UNSIGNED) + CAST(NEW.totalSuccessFlow AS UNSIGNED),
        totalErrorFlow= CAST(totalErrorFlow AS UNSIGNED)+CAST(NEW.totalErrorFlow AS UNSIGNED),
        totalErrorNum=CAST(totalErrorNum AS UNSIGNED)+CAST(NEW.totalErrorNum AS UNSIGNED)
        where insertTimes>=DATE_SUB(NOW(),INTERVAL CONCAT("'",MINUTE(NOW()),":",SECOND(NOW()),"'") MINUTE_SECOND)
             and insertTimes <NOW() and taskid=NEW.taskid;
   end if;
END;

查询当前小时内共有的记录数

   select count(*) into i_temp from tbdaylogger where  insertTimes>=DATE_SUB(NOW(),INTERVAL CONCAT("'",MINUTE(NOW()),":",SECOND(NOW()),"'") MINUTE_SECOND)
             and insertTimes < NOW()

CONCAT(str1,str2)链接字符串

DATE_SUB(NOW(),INTERVAL 1 DAY)

向前查询一天内的时间 即为当前时间向前一天

CAST(totalSuccessNum AS UNSIGNED)

转换成数字相加

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值