mysql 触发器条件判断偶尔失效_MySQL触发器中IF条件判断问题

MySQL触发器中IF条件判断问题前几天修改了一张回答表的触发器,结果保存草稿的时候报错:Data truncation: Truncated incorrect datetime value: '',经排查是触发器中一条判断的问题,我们来看原来的语句:

IF CONCAT(new.delete_flag,new.status)!=CONCAT(old.delete_flag,old.status) AND new.delete_flag=0 AND new.status=0 AND IFNULL(new.publish_time,'')!='' AND new.publish_time>DATE_ADD(NOW(),INTERVAL -30 DAY) THEN

INSERT IGNORE INTO kid_follow_feed(receiver,operator,type,content_type,content_id,time) VALUES(new.user_id,new.user_id,3,3,new.id,new.publish_time);

SET v_ret = redis_command_v2('LPUSH', 'mq:CalcFollowFeed', CONCAT(json_object('oper',new.user_id,'type',3,'contentType',3,'contentId',new.id)));

END IF;

原来的语句中先判断状态是否有变化,如果没有变化,再判断是否发布状态并且有发布时间,同时发布时间要在30天之内,结果这条语句就报错了,原因是保存草稿的时候发布时间是空字符串,修改成这样就没问题了:

IF new.delete_flag=0 AND new.status=0 AND IFNULL(new.publish_time,'')!='' THEN

IF CONCAT(new.delete_flag,new.status)!=CONCAT(old.delete_flag,old.status) AND new.publish_time>DATE_ADD(NOW(),INTERVAL -30 DAY) THEN

INSERT IGNORE INTO kid_follow_feed(receiver,operator,type,content_type,content_id,time) VALUES(new.user_id,new.user_id,3,3,new.id,new.publish_time);

SET v_ret = redis_command_v2('LPUSH', 'mq:CalcFollowFeed', CONCAT(json_object('oper',new.user_id,'type',3,'contentType',3,'contentId',new.id)));

END IF;

END IF;

你可能感兴趣的:(mysql,触发器条件判断偶尔失效)