我正在尝试执行触发器,但遇到错误:
如果有一条记录被插入到注册表中,同时我要检查该条目是否有referal\ u代码。如果记录有referal\u代码,那么我必须插入master\u id、district\u id、taluka\u id并将\u分配给另一个表上的字段(特许经营商\u代码)。
对于这种情况,我写了以下触发器
CREATE DEFINER=`root`@`localhost` TRIGGER `assign_to` AFTER INSERT ON `registration` FOR EACH ROW BEGIN IF (SELECT master_id,district_id,taluka_id,assign_to FROM franchisee_code WHERE franchisee_code.referal_code=NEW.referal_code) THEN UPDATE registration SET NEW.master_id =franchisee_code.master_id,NEW.district_id =franchisee_code.district_id,NEW.taluka_id =franchisee_code.taluka_id,NEW.assign_to =franchisee_code.assign_to WHERE NEW.id=NEW.id; END
但显示以下错误
以下查询失败:
"CREATE DEFINER=`root`@`localhost` TRIGGER `assign_to` AFTER INSERT ON `registration` FOR EACH ROW BEGIN SELECT master_id,district_id,taluka_id,assign_to FROM franchisee_code WHERE franchisee_code.referal_code=NEW.referal_code; UPDATE registration SET NEW.master_id =franchisee_code.master_id,NEW.district_id =franchisee_code.district_id,NEW.taluka_id =franchisee_code.taluka_id,NEW.assign_to =franchisee_code.assign_to WHERE NEW.id=NEW.id END"
mysql说:#1064-你的sql语法有错误;检查与您的mariadb服务器版本相对应的手册,以便在第5行的“end”附近使用正确的语法
请帮助我克服这个问题。
2条答案
按热度按时间kd3sttzy1#
你错过了一个结局如果;您可能没有设置分隔符,请参见https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html. 此外,您不能更新在触发器中触发触发器的表。你可以更新新的。前触发器中的值,而不是后触发器中的值。
hc2pp10m2#
你的扳机应该是下面这样的。
但是当您试图更新您输入的同一行时,mysql将不允许您这样做。
演示