2016-07-26 10 views
1

挿入前に条件をテストし、条件が満たされてから挿入をキャンセルするトリガを作成したいとします。挿入前のMySQLテストと条件が満たされた場合のキャンセル

if文が含まれているマニュアルでこのコードに遭遇しましたが、挿入をキャンセルする方法はドキュメントに記載されていません。

CREATE TRIGGER upd_check BEFORE UPDATE ON account -> FOR EACH ROW -> BEGIN -> IF NEW.amount < 0 THEN -> SET NEW.amount = 0; -> ELSEIF NEW.amount > 100 THEN -> SET NEW.amount = 100; -> END IF; -> END;

+0

このトリガーは、 'INSERT'ではなく、' UPDATE'のトリガーです。 – Blank

+0

MySQLからのINSERTをブロックする唯一の方法は例外をスローすることだと思います。あなたのアプリケーション層から 'INSERT'をブロックする方法はありますか? –

答えて

2

あなたはsignal

SIGNALがエラーを「返す」ための方法ですを使用する必要があります。 SIGNALは、エラー をハンドラ、アプリケーションの外側部分、またはクライアントへの の情報に提供します。また、エラーの の特性(エラー番号、SQLSTATE値、メッセージ)を制御します。

は、このようにあなたは

CREATE TRIGGER upd_check BEFORE UPDATE ON account 
    -> FOR EACH ROW 
    -> BEGIN 
    ->  IF NEW.amount < 0 THEN 
    ->   SET NEW.amount = 0; 
    ->  ELSEIF NEW.amount > 100 THEN 
    ->   SET NEW.amount = 100; 
      ELSE 
       SIGNAL SQLSTATE '01000' 
       SET MESSAGE_TEXT = 'Sorry cannot insert', MYSQL_ERRNO = 1000; 
    ->  END IF; 
    -> END; 

アップデートを持つことができます。また、error messages listを見て、より適切なエラー番号を選択することもできます。

関連する問題