MySQl在插入和更新同一表时触发错误(错误代码:1064)

时间:2018-06-22 07:34:45

标签: mysql sql database mysql-error-1064 database-trigger

TRIGGER `dn_name`.`schedule_arrive` AFTER INSERT
    ON `dn_name`.`administration_schedule`
    FOR EACH ROW BEGIN

    DECLARE approx_hr INT(11), update_hr DATETIME;
    SELECT approx_hr FROM `administration_routes` WHERE id = NEW.route_id INTO approx_hr;
    SELECT DATE_ADD(new.depart_time, INTERVAL approx_hr HOUR_MINUTE) INTO update_hr;    
    UPDATE administration_schedule SET arrive_time=approx_hr WHERE id = NEW.id;

END$$

在运行插入查询时,我设计为从具有相关ID的 route 表中选择大约小时,然后从新插入的出发时间将该值设置为approx_hrincrease datetime并分配到update_hr,最后更新启用触发器的同一表中的arrive_time字段。但是在执行查询时,系统显示如下;

  

错误代码: 1064   您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在',update_hr datetime附近使用正确的语法;   从administration_routes中第7行的id ='中选择大约_hr

2 个答案:

答案 0 :(得分:0)

关于NEW.myColumnOLD.myColumn,您只能在使用“之前”的东西时使用它们。插入后,您没有OLD.myColumnNEW.myColumn保留当前的内容。对于您要执行的操作,请使用“插入前”并将“选择,...选择...,更新...”更改为简单的

SET NEW.arrive_time = DATE_ADD(NEW.depart_time,INTERVAL ...);

答案 1 :(得分:0)

使用before update触发器:

CREATE TRIGGER `dn_name`.`schedule_arrive` BEFORE INSERT
    ON `dn_name`.`administration_schedule`
    FOR EACH ROW
BEGIN
    DECLARE approx_hr INT(11), update_hr DATETIME;

    SELECT approx_hr FROM `administration_routes` WHERE id = NEW.route_id INTO approx_hr;

    SELECT DATE_ADD(new.depart_time, INTERVAL approx_hr HOUR_MINUTE) INTO update_hr; 

    SET NEW.arrive_time = approx_hr;

END$$