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 name
是 UNIQUE
或 PRIMARY
。)
如果父 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 name
是 UNIQUE
或 PRIMARY
。)