MySQLトリガーの使用

MySQLトリガーの使用

1. トリガーの紹介

1. トリガーとは何ですか?

トリガーは、定義された条件が満たされたときにトリガーされ、トリガーで定義された一連のステートメントを実行する、テーブルに関連付けられたデータベース オブジェクトです。

2. トリガーの特徴

  • begin begin endと呼ばれる本体があり、 begin end end 間のステートメントは単純なものでも複雑なものでもかまいません。
  • トリガーとなる条件: I、D、U
  • トリガーするタイミング: 追加、削除、または変更の前または後
  • トリガー頻度: 行ごとに実行
  • トリガーはテーブル上で定義され、テーブルにアタッチされます。

つまり、操作はイベントによってトリガーされ、 INSERTステートメント、 UPDATEステートメント、およびDELETEステートメントが含まれます。これにより、アプリケーションはデータベース側でデータの整合性を確保できます。

注意: cannot associate a trigger with a TEMPORARY table or a view.

! !トリガーはできるだけ使用しないでください。お勧めしません。

トリガーがトリガーされるたびに 1 秒かかりinsert table 500仮定すると、トリガーは 500 回トリガーされる必要があります。トリガーの実行時間だけで500sかかり、 insert 500に合計 1 秒かかるため、このinsertの効率は非常に低くなります。したがって、特に注意する必要があるのは、トリガー的begin endの間のステートメントの実行効率が高く、リソースの消費が少なくなければならないということです。

トリガーは、どのような場合でも大量のリソースを消費するため、できるだけ使用しないでください。使用する場合は、注意して使用し、非常に効率的であることを確認してください。トリガーは各行に対して実行されます。頻繁に追加、削除、変更されるテーブルでは、大量のリソースを消費するため、トリガーを使用しないでください。

2. トリガーを作成する

作成する
    [定義者 = { ユーザー | 現在のユーザー }]
トリガー トリガー名
トリガー時間 トリガーイベント
tbl_name の各行
  [トリガー順序]
トリガー本体

トリガー時間: { 前 | 後 }

トリガーイベント: { INSERT | UPDATE | DELETE }

トリガー順序: { 後続 | 前 } 他のトリガー名

> BEFOREおよびAFTERパラメータは、トリガーがイベントの前か後かのいつ実行されるかを指定します。

> FOR EACH ROWトリガー イベントを満たすレコードに対するすべての操作がトリガーをトリガーすることを意味します。つまり、トリガーはデータの行ごとに 1 回トリガーされます。

> tigger_event詳細:

①INSERT型觸發器: 行が挿入されたときにトリガーがアクティブになります。これは、 INSERTLOAD DATA 、またはREPLACEステートメントによってトリガーされる場合があります ( LOAD DATステートメントは、一連の INSERT 操作に相当し、データ テーブルにファイルをロードするために使用されます)。

②UPDATE型觸發器:行が変更されたときにトリガーがアクティブになり、 UPDATE文によってトリガーされる場合があります。

③DELETE型觸發器:行が削除されたときにトリガーがアクティブになります。これは、 DELETEまたはREPLACEステートメントによってトリガーされる場合があります。

> trigger_orderMySQL5.7以降の機能で、複数のトリガーを定義し、 follows (trailing) またはprecedes (before) を使用してトリガーの実行順序を選択するために使用されます。

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

CREATE TRIGGERトリガー名BEFORE|AFTERトリガー イベントONテーブル名FOR EACH ROWステートメントを実行します。

例 1: trig1 という名前のトリガーを作成します。作業テーブルで挿入アクションが実行されると、現在の時刻が時間テーブルに自動的に挿入されます。

mysql> 挿入後にトリガー trig1 を作​​成する
    -> ON 行ごとに作業
    -> time VALUES(NOW()) に INSERT します。
 

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

CREATE TRIGGERトリガー名BEFORE|AFTERトリガーイベント

ON テーブル名 FOR EACH ROW

始める

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

終わり;

例 2:削除操作が条件を満たすと、 BEGINENDのステートメントを実行するトリガーを定義します。

mysql> 区切り文字 ||
mysql> 削除する前にトリガー trig2 を作成する
    -> ON 行ごとに作業
    -> 開始
    -> time VALUES(NOW()) に INSERT します。
    -> time VALUES(NOW()) に INSERT します。
    -> 終了||
mysql> 区切り文字 ;
 

3. NEWとOLDの詳しい説明

MySQL 、トリガーが配置されているテーブル内のデータ行を示すため、およびトリガー内で変更されたレコードの内容を参照するために、 NEWOLDが定義されています。具体的には、次のようになります。

在INSERT 、NEWは挿入しようとしている新しいデータ( BEFORE )または挿入された新しいデータ( AFTER )を示すために使用されます。

在UPDATEトリガーではOLD変更される予定または変更された元のデータを示すために使用され、 NEW変更される予定または変更された新しいデータを示すために使用されます。

在DELETEトリガーではOLD削除されるか削除された元のデータを示すために使用されます。

方向:

NEW.columnName (columnName は対応するデータ テーブル内の列の名前です)

さらに、 OLDは読み取り専用ですが、 NEWはトリガーでSET割り当てを使用できるため、トリガーが再度トリガーされず、循環呼び出しが発生します (たとえば、各学生を挿入する前に、学生番号に「2013」を追加します)。

例3:

mysql> アカウントテーブルを作成します (acct_num INT、金額 DECIMAL(10,2));
mysql> アカウントに INSERT INTO VALUES(137,14.98),(141,1937.50),(97,-100.00);

mysql> 区切り文字 $$
mysql> アカウントの更新前にトリガー upd_check を作成します
    -> 各行ごとに
    -> 開始
    -> IF NEW.amount < 0 の場合
    -> SET NEW.amount = 0;
    -> ELSEIF NEW.金額 > 100 THEN
    -> SET NEW.amount = 100;
    -> 終了IF;
    -> 終了$$
mysql> 区切り文字;

mysql> アカウントを更新し、amount=-10 を設定します。acct_num=137;

mysql> アカウントから * を選択します。
+----------+---------+
| アカウント番号 | 金額 |
+----------+---------+
| 137 | 0.00 |
| 141 | 1937.50 |
| 97 | -100.00 |
+----------+---------+

mysql> アカウントを更新し、金額を 200 に設定し、acct_num を 137 に設定します。

mysql> アカウントから * を選択します。
+----------+---------+
| アカウント番号 | 金額 |
+----------+---------+
| 137 | 100.00 |
| 141 | 1937.50 |
| 97 | -100.00 |
+----------+---------+
 

3. トリガーを表示する

1. トリガー情報を表示するためのSHOW TRIGGERSステートメント

mysql> トリガーを表示\G;

その結果、すべてのトリガーの基本情報が表示されますが、指定されたトリガーを照会することはできません。

2. information_schema.triggersテーブルでトリガー情報を表示する

mysql> information_schema.triggers\G から * を選択

その結果、すべてのトリガーの詳細情報が表示されます。同時に、このメソッドでは、指定されたトリガーの詳細情報を照会できます。

mysql> information_schema.triggers から * を選択します 
    -> ここで、trigger_name='upd_check'\G;
ヒント:

すべてのトリガー情報は、 information_schemaデータベースのtriggersテーブルに保存され、 SELECTステートメントを使用してクエリできます。トリガー情報が多すぎる場合は、 TRIGGER_NAMEフィールドを使用してクエリを指定するのが最適です。

4. トリガーを削除する

DROP TRIGGER [存在する場合] [スキーマ名.]トリガー名

トリガーを削除した後は、上記の方法で再度確認することをお勧めします。同時に、 database.trigを使用して特定のデータベース内のトリガーを指定することもできます。

ヒント:

予期しない操作を回避するために、不要になったトリガーを削除することが重要です

MySQL triggerの使用に関するこの記事はこれで終わりです。MySQL triggerの使用に関する詳細については、 MySQLの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL イベントとトリガーのトピックの絞り込み
  • 初心者から熟練者まで使えるMySQLデータベーストリガー
  • MySQL ストアド プロシージャ、トリガー、イベント スケジューラの入門ガイド
  • MySQLトリガートリガー例の詳細な説明
  • MySQL トリガーの使用方法と利点と欠点の紹介
  • バックアップと削除のためにリアルタイムでステートメントを検出するMySQLトリガーの考え方の詳細な説明
  • MySQLトリガーについて深く理解するための記事
  • MySQLトリガーの使用
  • MySQLトリガーの使い方を簡単に説明すると

<<:  ページリファクタリングスキル - コンテンツ

>>:  CSS の flex と inline-flex の違いの詳細な説明

推薦する

HTML で複数のクラス属性を定義する場合の無効な解決策

HTML を記述する過程で、クラス属性に複数の値を定義することがよくありますが、定義した値が無効であ...

yum を使用して rpm と関連する依存関係をダウンロードして、docker をオフラインでインストールします。

yum を使用してすべての依存関係を一緒にインストールできますが、–downloadonly –d...

JavaScript実行メカニズムの詳細な紹介

目次1. プロセスとスレッドの概念2. ブラウザの原則3. 同期と非同期4. 実行スタックとタスクキ...

JavaScript データ型の詳細な説明

目次1. リテラル1.1 数値リテラル1.2 浮動小数点リテラル1.3 特別な値1.4 文字列リテラ...

JS で Websocket ベースのマルチターミナル ブリッジング プラットフォームを実装する方法

目次1. デバッグ対象2. WebSocketの機能3. ソケット接続を確立する3.1 部屋の作成方...

MySQL スロークエリを通じて MySQL のパフォーマンスを最適化する方法

アクセス数が増えると、MySQL データベースへの負荷が増大します。MySQL アーキテクチャを使用...

JavaScriptでフロアナビゲーションエフェクトを作成するプロセスの詳細な説明

目次この期間の目標1. 関数の実装1.1 構造層1.2 スタイルレイヤー1.3 行動層1.3.1 フ...

マインスイーパゲームを実装するための jQuery プラグイン (2)

この記事では、jQueryプラグインを使用してマインスイーパゲームを実装する2番目の記事を参考までに...

CSS パフォーマンスの最適化 - will-change の使用方法の詳細な説明

will-change は、要素にどのような変更が行われるかをブラウザに伝え、ブラウザが事前に最適化...

Vue検証コードコンポーネントの使い方の詳しい説明

この記事の例では、vue検証コードコンポーネントで使用される具体的な実装コードを参考までに共有してい...

JS はシンプルなカレンダー効果を実装します

この記事では、シンプルなカレンダー効果を実現するためのJSの具体的なコードを参考までに紹介します。具...

CentOS7.6 システムで yum を使用して lnmp 環境を構成する方法

1. インストールバージョンの詳細 サーバー: MariaDB サーバーバージョン: 5.5.60-...

JavaScriptプロトタイプチェーン図のまとめと実践

目次プロトタイプチェーンプロトタイプチェーンに基づいてシンプルなJQueryライブラリを実装すること...

回転灯効果を実現するWeChatアプレットの例

序文日常の開発では、テキストの水平スクロール効果(一般にカルーセルと呼ばれる)によく遭遇します。これ...

JS配列インデックス検出におけるデータ型の問題の詳細な説明

WeChat アプレット プロジェクトを書いていたとき、その中に「都市選択」機能がありました。作者は...