MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLトリガーでSIGNALステートメントを使用するにはどうすればよいですか?


実際、MySQL SIGNALステートメントは、予期しない発生を処理するためのエラー処理メカニズムであり、必要に応じてアプリケーションを正常に終了します。基本的に、ハンドラーにエラー情報を提供します。基本的な構文は次のようになります-

SIGNAL SQLSTATE | condition_value
[SET signal_information_item = value_1,[, signal_information_item] = value_2,
etc;]

ここで、SIGNALキーワードは、SQLSTATE値、またはDECLARECONDITIONステートメントによって宣言された条件名です。 SIGNALステートメントは、常にSQLSTATE値またはSQLSTATE値で定義された名前付き条件を指定する必要があります。 SIGNALステートメントのSQLSTATE値は、5文字の英数字コードで構成されています。独自のSQLSTATEコードを「00」で開始しないでください。このような値は成功を示し、エラーの通知には無効であるためです。値が無効な場合、不正なSQLSTATEエラーが発生します。キャッチオールエラー処理では、「未処理のユーザー定義例外」を意味する「45000」のSQLSTATE値を割り当てる必要があります。

MySQLトリガーでのSIGNALステートメントの使用を説明するために、 BEFORE INSERTを作成する次の例を使用しています。 student_ageテーブルでトリガーします。 0未満の年齢を入力しようとすると、SIGNALステートメントを使用してエラーメッセージがスローされます。

mysql> Create trigger before_insert_studentage BEFORE INSERT on
student_age FOR EACH ROW BEGIN IF NEW.age<0 then SIGNAL SQLSTATE
'45000' SET MESSAGE_TEXT = 'age less than 0'; END if; END; //
Query OK, 0 rows affected (0.12 sec)

mysql> Insert into student_age(age, name) values(-10,'gaurav')//
ERROR 1644 (45000): age less than 0

上記の結果セットから、0未満の年齢を挿入しようとすると、SIGNALステートメントを使用してエラーがスローされることは明らかです。


  1. MySQLでWITHROLLUPを正しく使用するにはどうすればよいですか?

    WITH ROLLUP-を使用するための構文は、次のとおりです。 select yourColumnName1,sum(yourColumnName2) from yourTableName  group by yourColumnName1 with rollup; まずテーブルを作成しましょう- mysql> create table DemoTable1622     -> (     -> EmployeeCountryName varchar(20),     -> EmployeeSal

  2. MySQLでCURDATEでCONTAINS()を使用するにはどうすればよいですか?

    このために、CONCAT()をCURDATE()とともに使用できます。MySQLにはCONTAINS()という名前の関数はありません。 まず、現在の日付を取得しましょう。現在の日付は次のとおりです- mysql> select curdate(); これにより、次の出力が生成されます- +------------+ | curdate()  | +------------+ | 2019-11-28 | +------------+ 1 row in set (0.00 sec) テーブルを作成します- mysql> create table DemoTable18