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 //

その理由は、最後から 2 番目の行のセミコロンがその時点までのすべてをサーバーに送り返すため、サーバーはEND;最後の行を確認せずにトリガーを作成するためです。その見方では、それは構文エラーです。

このコンテキストでのコマンドの目的はDELIMITER、トリガー内の各ステートメントの終わり (サーバー用) とトリガーの終わり (クライアントがサーバーに送信するため) を区別することです。それらは異なりますが、クライアントがステートメントを終了したと考えることなく、トリガーの本文でセミコロンを使用できます。

于 2012-11-08T10:14:15.770 に答える