我试图让这段代码工作但无济于事。
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
答案 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);
注意:这不能解决您的特定语法错误。这解决了代码中的逻辑错误。