【问题标题】:MySQl trigger error on insert and update same table (Error Code: 1064)MySQl 在插入和更新同一个表时触发错误(错误代码:1064)
【发布时间】:2018-06-22 07:34:44
【问题描述】:
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 中选择 approx_hr,其中 id =' 在第 7 行

【问题讨论】:

  • 您不能对触发触发器的表进行操作。

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


【解决方案1】:

关于NEW.myColumnOLD.myColumn,你只能在使用“BEFORE”的时候使用它们。插入后,您没有 OLD.myColumnNEW.myColumn 插入当前的内容。对于您想要做的事情,请使用“BEFORE INSERT”并将您的“SELECT,... SELECT..., UPDATE...”更改为简单的

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

【讨论】:

    【解决方案2】:

    使用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$$
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 2013-09-13
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多