如何正确执行触发器?

qvsjd97n  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(352)

我正在尝试执行触发器,但遇到错误:
如果有一条记录被插入到注册表中,同时我要检查该条目是否有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”附近使用正确的语法
请帮助我克服这个问题。

kd3sttzy

kd3sttzy1#

你错过了一个结局如果;您可能没有设置分隔符,请参见https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html. 此外,您不能更新在触发器中触发触发器的表。你可以更新新的。前触发器中的值,而不是后触发器中的值。

hc2pp10m

hc2pp10m2#

你的扳机应该是下面这样的。

DROP TRIGGER IF EXISTS assign_to ;
DELIMITER$$
CREATE TRIGGER assign_to AFTER INSERT ON registration
FOR EACH ROW 
BEGIN

  SET @masterId := 0;
  SET @districtId := 0;
  SET @talukaId := 0;
  SET @assignTo := 0;
    SELECT master_id ,district_id, taluka_id , assign_to 
    INTO @masterId, @districtId,@talukaId,@assignTo 
    FROM franchisee_code 
    WHERE franchisee_code.referal_code = NEW.referal_code;

   IF @masterId > 0 THEN
       UPDATE registration 
    SET NEW.master_id = @masterId, 
    NEW.district_id = @districtId, 
    NEW.taluka_id = @talukaId, 
    NEW.assign_to = @assignTo 
    WHERE NEW.id=NEW.id ;
   END IF;
 END$$

但是当您试图更新您输入的同一行时,mysql将不允许您这样做。
演示

相关问题