MySQl在插入和更新同一个表时触发错误(错误代码:1064)
在运行insert查询时,我设计从带有相关id的route表中选择约小时,并将该值设置为MySQl在插入和更新同一个表时触发错误(错误代码:1064),mysql,sql,database,mysql-error-1064,database-trigger,Mysql,Sql,Database,Mysql Error 1064,Database Trigger,在运行insert查询时,我设计从带有相关id的route表中选择约小时,并将该值设置为约小时,从新插入的出发时间开始增加日期时间,并分配给更新时间,最后更新启用触发器的同一表中的到达时间字段。但在执行我的查询时,系统显示如下: 错误代码:1064 您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near',update_hr datetime的正确语法; 从第7行的administration\u routeswhere id='中选择大约\u hr 关于NEW.myC
约小时
,从新插入的出发时间开始增加日期时间
,并分配给更新时间
,最后更新启用触发器的同一表中的到达时间
字段。但在执行我的查询时,系统显示如下:
错误代码:1064
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near',update_hr datetime的正确语法;
从第7行的administration\u routes
where id='中选择大约\u hr
关于
NEW.myColumn
和OLD.myColumn
,您只能在使用“BEFORE”时使用它们。插入后,您没有OLD.myColumn
或NEW.myColumn
作为当前的。对于要执行的操作,请使用“插入前”并将“选择…,选择…,更新…”更改为简单的
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$$
更新前使用
触发器:
SET NEW.arrive_time = DATE_ADD(NEW.depart_time,INTERVAL ...);
不允许对触发触发器的表执行操作。
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$$