MySQL在插入触发器语法错误之前?

时间:2012-11-08 10:12:28

标签: mysql

我正在尝试创建一个简单的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

1 个答案:

答案 0 :(得分:3)

使用不同的分隔符,例如:

DELIMITER //

...然后在//行中使用END //

原因是你的倒数第二行中的分号正在将所有内容发送回服务器,因此服务器看不到你的最终END;并创建触发器而不会看到最后一行。在它看来,这是一个语法错误。

此上下文中DELIMITER命令的目的是区分触发器中的每个语句的结尾(对于服务器)和触发器的结束(客户端将其发送到服务器) )。虽然它们不同,但您仍然可以在触发器的主体中使用分号,而不会让客户认为您已终止该声明。