MySQLデータベーストリガーの詳細な説明

MySQLデータベーストリガーの詳細な説明

1 はじめに

この記事では、MySQL のトリガーについてまとめます。トリガーの概念から始めて、トリガーの作成、使用、削除の方法を例とともに紹介します。

2 トリガーの紹介

MySQL トリガーは、ストアド プロシージャと同様に、MySQL に埋め込まれたプログラムです。トリガーは、INSERT、UPDATE、DELETE などのアクションをトリガーするイベントです。トリガーが定義されている場合、データベースがこれらのステートメントを実行すると、トリガーがアクティブ化され、対応する操作が実行されます。トリガーは、テーブルに関連付けられたコマンド データベース オブジェクトです。テーブルで特定のイベントが発生すると、オブジェクトがアクティブ化されます。

トリガーは特別なストアド プロシージャです。違いは、ストアド プロシージャは call ステートメントを使用して呼び出す必要があるのに対し、トリガーは call ステートメントを使用して呼び出す必要がなく、手動で開始する必要もないことです。定義済みのイベントが発生する限り、トリガーは MySQL によって自動的に呼び出されます。トリガーは他のテーブルをクエリでき、複雑な SQL ステートメントを含めることができます。

3 トリガーを作成する

(1)実行文を1つだけ持つトリガーを作成する

文法構造は次のとおりです。

CREATE TRIGGER トリガー名 トリガー時間 トリガーイベント ON テーブル名 FOR EACH ROW トリガーステートメント

trigger_name: ユーザー定義のトリガー名。

trigger_time: トリガー イベントを識別します。before (時間が発生する前に実行) または after (イベントが発生した後に実行) として指定できます。

trigger_event: INSERT、UPDATE、DELETE などのトリガー イベントを識別します。

table_name: トリガーが作成されるテーブル。

trigger_stmt: トリガー実行ステートメント。

(2)複数の実行文を持つトリガーを作成する

文法構造は次のとおりです。

CREATE TRIGGER トリガー名 トリガー時間 トリガーイベント ON テーブル名 各行

 始める

  ステートメント実行リスト END

トリガーに少なくとも 1 つの実行ステートメントがある場合、複数の実行ステートメントを BEGIN と END で囲む必要があります。BEGIN と END は、それぞれコード ブロック全体の開始と終了を示します。

トリガー操作を説明するために、3 つのデータ テーブルを作成しましょう。

テーブル tb_student を作成します(

   id int 主キー auto_increment,

   名前varchar(10)

);

テーブル tb_before_trigger を作成します(

   id int 主キー auto_increment,

   数値 int 、

   time_now datetime NULL デフォルト CURRENT_TIMESTAMP

);

テーブルtb_after_triggerを作成します(

   id int 主キー auto_increment,

   数値 int 、

   time_now datetime NULL デフォルト CURRENT_TIMESTAMP

);

例 1: before_trigger という名前のトリガーを作成します。このトリガーは、tb_student テーブルで各挿入操作が実行される前にトリガーされます。トリガーされると、tb_student テーブル内のレコードの合計数を含むレコードが before_trigger テーブルに挿入されます。

区切り文字 //

挿入前にトリガー before_trigger を作成する

   各行のtb_studentについて

   始める

     tb_before_trigger (num) に挿入し、tb_student から count(*) を選択します。

   終わり

   //

区切り文字 ;

例 2: after_trigger という名前のトリガーを作成します。これは、tb_student テーブルで各挿入操作が実行される前にトリガーされます。トリガーされると、tb_student テーブル内のレコードの合計数を含むレコードが before_trigger テーブルに挿入されます。

区切り文字 //

挿入後にトリガー after_trigger を作成する

   各行のtb_studentについて

   始める

     tb_after_trigger (num) に挿入し、tb_student から count(*) を選択します。

   終わり

   //

区切り文字 ;

例 1 と例 2 で作成したトリガーをテストし、tb_student テーブルにデータを挿入してみましょう (最初の 3 つのテーブルにはレコードがありません)。

tb_student (name) に値 ('zhangsan') を挿入します。

挿入後、3 つのテーブルのデータを確認します。

tb_student テーブル:

tb_before_trigger テーブル:

tb_after_trigger テーブル:

tb_student テーブルで挿入操作が実行された後、他の 2 つのテーブルでもそれぞれレコードが更新されていることがわかります。tb_before_trigger テーブルの num 値は 0 であり、これは tb_student で挿入操作が実行される前にレコードが挿入されたことを証明しています。tb_after_trigger テーブルの num 値は 1 であり、これは tb_student で挿入操作が実行された後にレコードが挿入されたことを証明しています。これが、前後の違いです。

その他の条件付きトリガーの場合、使用方法は例 1 および例 2 と同様ですが、この記事では説明しません。

4 トリガーを表示

(1)トリガーステートメントを表示する

show triggers ステートメントを使用して、例 1 と例 2 で作成されたトリガーを表示できます。

トリガーを表示します。

出力:

(2)トリガーテーブルでトリガーを表示する

information_schema データベースの triggers テーブル内の MySQL データベースに保存されているすべてのトリガーは、次のクエリ ステートメントを通じて表示できます。

information_schema.triggers から * を選択し、trigger_name が 'before_trigger' であることを確認します。

出力:

クエリ条件が指定されていない場合は、すべてのトリガー情報が表示されます。

5. トリガーを削除する

トリガーを削除するには、DROP TRIGGER ステートメントを使用します。基本的な構文構造は次のとおりです。

DROP TRIGGER [スキーマ名] トリガー名

このうち、schema_name はデータベース名を示し、オプションのパラメータです。省略した場合は、現在のデータベースからトリガーを削除することを意味します。

例3: 例1で作成したトリガーbefore_triggerを削除する

トリガー before_trigger を削除します。

6 結論

トリガーは、場合によっては非常に効果的ですが、あまり効率的ではないので、できるだけ使用しないようにしてください。

著者: アオ・チェン

GitHub: https://github.com/ChenHuabin321

以上がMySQLデータベースのトリガーの詳しい説明です。MySQLトリガーの詳細については、123WORDPRESS.COMの他の関連記事もご覧ください。

以下もご興味があるかもしれません:
  • MySQLはトリガーを使用してデータベース内のテーブルの行制限を解決します。詳細な説明と例
  • MySQL ストアド プロシージャ、トリガー、イベント スケジューラの入門ガイド
  • MySQLトリガートリガー例の詳細な説明
  • MySQL トリガーの使用方法と利点と欠点の紹介
  • MySQLトリガーの使用
  • MySQLトリガーについて深く理解するための記事
  • MySQLトリガーの使用
  • MySQLトリガーの例の詳細な説明
  • 初心者から熟練者まで使えるMySQLデータベーストリガー

<<:  Gitコミットログの変更方法のまとめ

>>:  Vue で className として空の文字列を使用することはなぜ推奨されないのですか?

推薦する

Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールするとサービスが起動できない問題を解決します

今日、mysql の公式サイトから mysql-5.7.18-winx64.zip をダウンロードし...

HTMLページでチェックボックスを操作する方法

チェックボックスは Web ページで非常によく使用されます。e コマースの Web サイトでもプラッ...

MySql バッチに挿入するときにデータの重複を避ける方法

目次序文1. ignore を挿入2. 重複キーの更新時3. を置き換える要約する序文Mysql は...

セマンティックタグを使用して、IE6、7、8と互換性のあるHTMLを記述します。

HTML5 では、ヘッダー、フッター、ナビゲーションなどのセマンティック タグが追加されているため...

Linux ファイル管理コマンド例の分析 [表示、閲覧、統計など]

この記事では、Linux ファイル管理コマンドについて例を挙げて説明します。ご参考までに、詳細は以下...

ファイルの種類を検出するJavaScriptメソッド

目次1. 画像のバイナリデータを表示する方法2. 絵の種類の見分け方3. 画像の種類を検出する方法3...

XHTML 3つの文書型宣言

XHTML は 3 つのドキュメント タイプ宣言を定義します。最もよく使用されるのは XHTML T...

CentOS に Nginx をインストールする方法

公式ドキュメント: https://nginx.org/en/linux_packages.html...

HTML 学習ノート - HTML 構文の詳細な説明 (必読)

1. HTML マークアップ言語とは何ですか? HTML は、Web ページの情報を表すマークアッ...

MySQLでMyISAMストレージエンジンをInnodbに変更した操作記録のまとめ

一般的に、MySQL はデフォルトでさまざまなストレージ エンジンを提供しており、次のように表示され...

CSS3を使用してプログレスバー効果を実現し、動的にパーセンテージを追加する

プロジェクト中、プログレスバーを実装するために js の requestAnimationFrame...

MySQL 8.0.22 のインストールと設定のグラフィックチュートリアル

MySQL8.0.22のインストールと設定(超詳細)参考までに、具体的な内容は次のとおりです。みなさ...

CSS を使用して適応型の幅と高さを持つ 16:9 の長方形を実装する例

先ほど、適応幅と高さが1:1の正方形を作成する方法について説明しました。 https://www.j...

Vue のフィルターの適用シナリオの詳細な説明

filterは通常、特定の値をフィルターするために使用されます。たとえば、フィールドが空だが、フロン...

MySQL複合インデックスの詳細な研究

複合インデックス (結合インデックスとも呼ばれます) は、複数の列に対して作成されるインデックスです...