【问题标题】:MySQL trigger if-else insert updateMySQL 触发 if-else 插入更新
【发布时间】:2017-05-10 01:14:13
【问题描述】:

我正在尝试使此代码正常工作,但无济于事..

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

【问题讨论】:

    标签: mysql sql if-statement database-trigger


    【解决方案1】:

    关于语法错误,我想是你忘记了END IF后面的分号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 ;
    

    【讨论】:

    • 我很尴尬,但谢谢你的鹰眼! :)
    • 感谢@Blank 的这个提示,它只是帮助我解决了我一直在努力解决的问题。你和 Stackoverflow 拯救了这一天:)
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多