1

我正在尝试创建一个简单的 Before Insert MySQL 触发器,以检查表中是否存在任何重复项。但是我在带有(*). 怎么了 ?

       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

4

1 回答 1

3

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

DELIMITER //

...然后//在您的END //线路中使用。

原因是您的倒数第二行中的分号将所有内容发送回服务器,因此服务器看不到您的 finalEND;并在没有看到最后一行的情况下创建触发器。在它看来,这是一个语法错误。

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

于 2012-11-08T10:14:15.770 回答