2017-05-10 87 views
0

我试图让这段代码工作,但无济于事..MySQL的触发器的if-else INSERT,UPDATE

DELIMITER $$ 

CREATE 
    TRIGGER `update_tbl1` AFTER UPDATE 
    ON `tbl1` 
    FOR EACH ROW BEGIN 

     IF (SELECT count(*) FROM tbl1 WHERE stn=NEW.stn) = 1 
     THEN 
     UPDATE tbl2 SET date_posted=NEW.date_posted WHERE stn=NEW.stn; 
     ELSE 
     INSERT INTO tbl2 (stn) VALUES (NEW.stn); 
     END IF 

    END$$ 

DELIMITER ; 

我有两个表,我想一个触发器,将更新TBL2如果TBL1是只有当数据已经存在于tbl2上时才更新,否则插入它。我的代码似乎是可行的,错误似乎是语法相关的,但我无法找到在哪里。

编辑:

以下是错误:

#1064 - 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 'INTO tbl2 (stn) VALUES (NEW.stn); END IF END' at line 10 

回答

0

关于语法错误,我认为这只是你忘了END IF后分号;,尝试以下操作:

DELIMITER $$ 

CREATE 
    TRIGGER `update_tbl1` AFTER UPDATE 
    ON `tbl1` 
    FOR EACH ROW BEGIN 

     IF (SELECT count(*) FROM tbl1 WHERE stn=NEW.stn) = 1 
     THEN 
     UPDATE tbl2 SET date_posted=NEW.date_posted WHERE stn=NEW.stn; 
     ELSE 
     INSERT INTO tbl2 (stn) VALUES (NEW.stn); 
     END IF; 

    END$$ 

DELIMITER ; 
+0

我很尴尬,但感谢你的鹰眼前! :) – xjshiya

0

我不知道语法错误是什么,但你想要的逻辑是:

INSERT INTO tbl2 (stn) 
    VALUES (NEW.stn) 
    ON DUPLICATE KEY UPDATE SET date_posted = NEW.date_posted; 

对于这个工作,你需要一个独特的索引tbl2(stn)

CREATE UNIQUE INDEX unq_tbl2_stn ON tbl2(stn); 

注意:这不能解决您的特定语法错误。这解决了代码中的逻辑错误。