MySQL:创建触发器时出现语法错误

时间:2018-11-14 07:10:04

标签: mysql sql triggers innodb

如果父表中不存在该行,我只是试图将其插入到父表中。我在“ INSERT INTO”行上看到“ Statement notcomplete。Expecting';'”。

CREATE TRIGGER SellsInsertAlcoholAdd 
AFTER INSERT ON Sells
FOR EACH ROW
BEGIN
    IF(NEW.`Alcohol name` NOT IN
        (SELECT `Alcohol name` FROM Alcohol))
    THEN INSERT INTO Alcohol VALUES(NEW.`Alcohol Name`, NEW.`Type`, NEW.ABV, NEW.Manufacturer);
    END IF;
END

2 个答案:

答案 0 :(得分:1)

您不必要获取所有的Alcohol name值,然后检查其中的NEW值。相反,您可以更改为使用NOT EXISTS()

您还需要在开始时将DELIMITER更改为其他内容(;除外)。最后,将其重新定义为;

DELIMITER $$
CREATE TRIGGER SellsInsertAlcoholAdd 
AFTER INSERT ON Sells
FOR EACH ROW
BEGIN
    IF NOT EXISTS(SELECT 1 FROM Alcohol 
                  WHERE `Alcohol name` = NEW.`Alcohol name`) THEN
      INSERT INTO Alcohol 
      VALUES(NEW.`Alcohol Name`, NEW.`Type`, NEW.ABV, NEW.Manufacturer);
    END IF;
END $$
DELIMITER ;

答案 1 :(得分:1)

此外(除了Madhur的答案),您不需要任何IF。只需执行INSERT IGNORE ...。 (这假设Alcohol nameUNIQUEPRIMARY。)