2011-02-20 11 views
0

どのようにしてEventをトリガで停止しますか?たとえば、次のようにMySQLトリガでイベントを停止する

CREATE TRIGGER checkPlayer BEFORE INSERT ON players 

BEGIN 

    DECLARE ctr INT; 

    SELECT count(*) 
    INTO ctr 
    FROM players 
    WHERE fName = NEW.fName 
    AND lName = NEW.lName; 

    IF ctr > 0 THEN 
    -- LEAVE and don't insert because player exists 
    END IF; 

END 

答えて

1

MySQLはそのようなことのためにSIGNALを使用しています:

SIGNALは、「リターン」エラーへの道である。私は、以下のこの単純なコードを持っていますSIGNALは、ハンドラ、アプリケーションの外側部分、またはクライアントにエラー情報を提供します。また、エラーの特性(エラー番号、SQLSTATE値、メッセージ)を制御します。 SIGNALがなければ、存在しないテーブルを意図的に参照してルーチンがエラーを返すような回避策に頼る必要があります。 (私の知る限り、を含む、適切なSIGNAL値)でもerror conditional in a BEFORE trigger

トリガと、トリガをトリガしたステートメントを中止します。お使いのバージョンのMySQLがSIGNALをサポートしていない場合(つまり、バージョンが5.5未満の場合)、古い「選択したテーブルから選択する」ハックや"violate a PK by a double INSERT"ハックなどの別の方法でエラーをトリガする必要があります。

私はSIGNALのものを確認することはできませんので、便利です。 "19.3.1。トリガー構文"の関連セクションは、5.1,5.2、および5.5と同じですが、そのようなものに頼る必要がある場合は、 "エラーをトリガする" klugeの1つが機能するはずです。

+0

ありがとうございました。私は検索する単語を探していました。実際にはあなたが言った「シグナル」でした – bluezald

1

サンプルコードのある信号を説明するミニブログ記事があります。 hereをクリックします。また、同じ主キーを持つ2つのエントリを挿入して例外を生成するのではなく、データベースに挿入ステートメントを含まない除算0例外を使用することもできます。

関連する問題