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

MySQL: Syntax error when creating a trrigger

如果父 table 中不存在该行,我只是尝试向父 table 中插入一行。我在 "INSERT INTO" 行收到 "Statement incomplete. 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

您不必要地获取所有 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 ;

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