MySQL触发if-else插入更新

时间:2017-05-10 01:14:13

标签: mysql sql if-statement database-trigger

我试图让这段代码工作但无济于事。

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 ;

我有两个表,我想要一个触发器,如果​​tbl1被更新,将更新tbl2,仅当数据已存在于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

2 个答案:

答案 0 :(得分:1)

关于语法错误,我认为这只是您在;之后忘记分号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 ;

答案 1 :(得分: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);

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