MySQL 触发 if-else 插入更新

MySQL trigger 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 ;

我有两个表,我想要一个触发器,它会在 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

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

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);

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

关于语法错误,我认为这只是你在 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 ;