简体   繁体   English

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

[英]MySQl trigger error on insert and update same table (Error Code: 1064)

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

On running insert query, I designed to select approx hour from route table with related id and set that value to approx_hr , increase datetime from new inserted depart time and assign to update_hr and finally update the arrive_time field in trigger enabled same table. 在运行插入查询时,我设计为从具有相关ID的路由表中选择大约小时,并将该值设置为approx_hr ,从新插入的出发时间开始increase datetime并分配给update_hr ,最后更新已启用触发器的同一表中的arrive_time字段。 But on executing my query, the system show as follows; 但是在执行我的查询时,系统显示如下;

Error Code: 1064 You have an error in your SQL syntax; 错误代码: 1064您的SQL语法错误; check the manual that corresponds to your MySQL server version for the right syntax to use near ', update_hr datetime; 检查与您的MySQL服务器版本相对应的手册,以在',update_hr datetime附近使用正确的语法; select approx_hr from administration_routes where id =' at line 7 从第7行的id ='的administration_routes中选择rox_hr

About the NEW.myColumn and OLD.myColumn , you can only use them when using "BEFORE" something. 关于NEW.myColumnOLD.myColumn ,只有在使用“ BEFORE”之前,才能使用它们。 After an insert, you don't have an OLD.myColumn or NEW.myColumn gut a current one. 插入后,您没有OLD.myColumnNEW.myColumn保持当前状态。 for what you want to do, use "BEFORE INSERT" and change your "SELECT,... SELECT..., UPDATE..." to a simple 对于您要执行的操作,请使用“插入前”并将“选择,...选择...,更新...”更改为简单

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

Use a before update trigger: 使用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$$

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM