首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入和更新同一表上的MySQl触发器错误(错误代码: 1064)

插入和更新同一表上的MySQl触发器错误(错误代码: 1064)
EN

Stack Overflow用户
提问于 2018-06-22 07:34:44
回答 2查看 989关注 0票数 0
代码语言:javascript
复制
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$$

在运行insert查询时,我设计从具有相关id的路由表中选择约小时,并将该值设置为approx_hr,将increase datetime从新插入的离开时间中分配给update_hr,最后在启用触发器的同一表中更新arrive_time字段。但是在执行我的查询时,系统显示如下;

错误代码: 1064您的MySQL语法出现了错误;检查与MySQL服务器版本对应的手册,以获得正确的语法以使用update_hr datetime;在第7行的administration_routes中选择approx_hr,其中id =‘

EN

回答 2

Stack Overflow用户

发布于 2018-06-22 11:03:44

关于NEW.myColumnOLD.myColumn,您只能在使用“先于”的东西时使用它们。插入后,您没有当前的OLD.myColumnNEW.myColumn肠道。要做的事情,使用“前插入”,并更改您的“选择,.选择.更新.”到一个简单的

代码语言:javascript
复制
SET NEW.arrive_time = DATE_ADD(NEW.depart_time,INTERVAL ...);
票数 0
EN

Stack Overflow用户

发布于 2018-06-22 11:06:08

使用before update触发器:

代码语言:javascript
复制
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$$
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50982923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档