良好的习惯需要慢慢养成,我最近开始不定时写博客,主要内容都是开发中遇到的问题,以及解决方式。 今天是解决了触发器创建失败报语法错误的问题。
其实这问题从昨天开始就出现了,我是第一次使用触发器,只会简单的使用。话不多说,直接上代码
CREATE TRIGGER trig2 AFTER UPDATE ON `y`.`counselor` FOR EACH ROW BEGIN IF (select count(id) from `x`.`t_staff` where `create_date_time`=OLD.update_time)>0 THEN UPDATE `x`.`t_staff` SET group_id = 7, create_date_time = NEW.update_time WHERE create_date_time = OLD.update_time; ELSE INSERT INTO `x`.`t_staff`(`group_id`, `state`, `create_date_time`) VALUES (7, 1, NEW.update_time); END IF; END;这个创建触发器的语句一运行就报错
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 12结果我不停地寻找错误以及相关文章,在尝试加入了 delimiter 函数后触发器创建成功了,代码如下:
delimiter // CREATE TRIGGER trig2 AFTER UPDATE ON `y`.`counselor` FOR EACH ROW BEGIN IF (select count(id) from `x`.`t_staff` where `create_date_time`=OLD.update_time)>0 THEN UPDATE `x`.`t_staff` SET group_id = 7, create_date_time = NEW.update_time WHERE create_date_time = OLD.update_time; ELSE INSERT INTO `x`.`t_staff`(`group_id`, `state`, `create_date_time`) VALUES (7, 1, NEW.update_time); END IF; END; //我在创建触发器的语句钱加上delimiter //,并在创建触发器的语句最后面补上//,我百度一番之后,了解了原因:
如果不使用delimiter修改结束符的话,当我们执行完 ‘UPDATE x.t_staff SET group_id = 7, create_date_time = NEW.update_time WHERE create_date_time = OLD.update_time;’ 这条语句后,mysql解释器识别到分号就自动执行了,而修改了结束符后,只有我们输入// 时,创建触发器这条语句才会执行。
点击可参考其他博主写的文章
END
