我正在尝试创建一个简单的Before Insert MySQL Trigger,以检查表中是否存在任何重复项。但是我在(*)
的行中遇到了语法错误。怎么了?
delimiter ;
(*) CREATE TRIGGER `BookLanguages_BeforeInsertTrigger`
BEFORE INSERT ON `BookLanguages`
FOR EACH ROW
BEGIN
IF (exists(select * from Languages bl where bl.BookID = new.BookID and bl.LanguageID = new.LanguageID)) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'An error occurred';
END IF;
(*) END;
我正在使用社区服务器v5.5.21
答案 0 :(得分:3)
使用不同的分隔符,例如:
DELIMITER //
...然后在//
行中使用END //
。
原因是你的倒数第二行中的分号正在将所有内容发送回服务器,因此服务器看不到你的最终END;
并创建触发器而不会看到最后一行。在它看来,这是一个语法错误。
此上下文中DELIMITER
命令的目的是区分触发器中的每个语句的结尾(对于服务器)和触发器的结束(客户端将其发送到服务器) )。虽然它们不同,但您仍然可以在触发器的主体中使用分号,而不会让客户认为您已终止该声明。