[英]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.myColumn
和OLD.myColumn
,只有在使用“ BEFORE”之前,才能使用它们。 After an insert, you don't have an OLD.myColumn
or NEW.myColumn
gut a current one. 插入后,您没有
OLD.myColumn
或NEW.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.