MySQLトリガーの使用と理解

MySQLトリガーの使用と理解

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

特定のデータ操作 (挿入/更新/削除) を監視し、関連する操作 (挿入/更新/削除) をトリガーしてデータの整合性を保護できる特殊なタイプのデータベース プログラム。

私の個人的な理解では、これは Java のオブザーバー パターンに少し似ています。オブジェクトが変更されると、オブザーバーも応答します。

Mysql は 5.0 以降でトリガーをサポートしているようです。

2. トリガーを作成する

トリガーを作成する 2 つの方法、ステートメントを使用して作成する方法と、Navicat を使用して作成する方法を紹介します。

トリガーを作成するための構文は次のとおりです。

CREATE TRIGGER トリガー名 トリガー時間 トリガーイベント ON tb_name FOR EACH ROW トリガーステートメント
trigger_name: トリガーの名前 trigger_time: トリガーの時間。BEFORE または AFTER のいずれかになります。
trigger_event: トリガーイベント、INSERT、DELETE、または UPDATE
tb_name: トリガーが作成されるテーブルを示します。trigger_stmt: トリガーの本体。SQL ステートメント、または BEGIN と END で囲まれた複数のステートメントになります。したがって、MySQL は次の 6 種類のトリガーを作成すると言えます。
挿入前、削除前、更新前
挿入後、削除後、更新後

トリガー名パラメータは、作成するトリガーの名前を参照します。

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

FOR EACH ROW は、トリガー イベントを満たすレコードに対するすべての操作がトリガーをトリガーすることを意味します。

ステートメントを実行する複数のトリガーを作成します。

CREATE TRIGGER トリガー名 BEFORE | AFTER トリガーイベント ON テーブル名 FOR EACH ROW
始める
 ステートメントリストの実行 END

NEWとOLDの使用:

トリガータイプ新旧の活用
入れる新規は新しく追加されたデータを表します
アップデート新しいは更新されたデータを表し、古いは更新前のデータを表します。
消去oldは削除されるデータを表します

フィールドには new/lod という名前を付けることができます。

次に、テスト用に 2 つのテーブルを作成します。

スタテーブル: メインテーブル (観察)

`stu` が存在する場合はテーブルを削除します。
テーブル `stu` を作成します (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` varchar(255) 文字セット utf8mb4 照合 utf8mb4_general_ci NULL デフォルト NULL コメント 'Name',
`age` int(11) NULL デフォルト NULL コメント '年齢',
`sort` int(11) NULL デフォルト NULL コメント 'ソートフィールド',
BTREE を使用した主キー (`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

stu_log テーブル: トリガー関連テーブル (オブザーバー)

`stu_log` が存在する場合はテーブルを削除します。
テーブル `stu_log` を作成します (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(255) 文字セット utf8mb4 COLLATE utf8mb4_general_ci NULL デフォルト NULL,
`create_time` datetime(0) NULL デフォルト NULL,
BTREE を使用した主キー (`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

ここで、stu テーブルにデータが追加または削除されると、名前と時刻が記録され、stu_log に同期的にログが記録されるビジネスがあると仮定します。

トリガーを使用しない場合は、この要件を実装するためのコードを記述する必要がありますが、トリガーを使用すると簡単に実現できます。

まず、次のステートメントを使用して挿入トリガーを作成します。

`insert_log` が存在する場合はトリガーを削除します。
デリミタ;;
行ごとに `stu` に INSERT した後にトリガー `add_log` を作成します
stu_log(name,create_time) に VALUES(new.`name`,now()) を挿入します。
終わり
;;
区切り文字 ;

実行結果:

次に、Navicat を使用して削除トリガーを作成します。

ステップ1: スタテーブルを右クリックし、「テーブルのデザイン」----トリガーを選択します。

ステップ2: 図に示すようにオプションを入力し、削除前にトリガーを選択します。

ステップ 3: 図に示すように、下の定義ボックスに実行ステートメントを記述します。[保存] をクリックすることを忘れないでください。

声明:

始める
stu_log(name,create_time) に VALUES(old.`name`,now()) を挿入します。
終わり

3. トリガーを使う

テスト: 新しいデータを追加する

stu (name,age) に VALUES('李白',36) を挿入します

stu テーブルと stu_log テーブルを表示します。

図の通り、トリガーが発動しました!

データの一部を削除するテスト

名前が「Li Bai」である stu から削除

stu テーブルと stu_log テーブルを表示します。

図の通り、トリガーが発動しました!

上記は、MySQL トリガーの使用方法と理解に関する詳細な内容です。MySQL トリガーの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQLデータベーストリガーの詳細な説明
  • MySQL トリガー構文とアプリケーション例
  • MySQL トリガーの原理と使用例の分析
  • MySQL トリガーの使用方法と利点と欠点の紹介

<<:  ブラウザのスクロールバーのスタイルを変更するための純粋な CSS の例

>>:  W3C チュートリアル (14): W3C RDF および OWL アクティビティ

推薦する

MySQL で戻り値ありと戻り値なしのストアド プロシージャを書く 2 つの方法

プロセス1: 戻り値あり: proc_addNum が存在する場合はプロシージャを削除します。 プロ...

vue $setは配列コレクションオブジェクトへの値の割り当てを実装します

Vue $set 配列コレクションオブジェクトの割り当てVue カスタム配列オブジェクト コレクショ...

CSSオーバーフローメカニズムについての簡単な説明

CSS オーバーフローのメカニズムを詳細に学ぶ必要があるのはなぜですか?実際の開発プロセスでは、コン...

シンプルなウェブデザインコンセプトのカラーマッチング

(I)ウェブページのカラーマッチングの基本概念(1)白黒の言葉は永遠のテーマです。誰もそれを悪く言う...

要素シャトルフレームのパフォーマンス最適化の実装

目次背景解決新しい質問高度な背景シャトル ボックスが大量のデータを処理すると、レンダリングされる D...

HTML ページでギリシャ文字を使用する方法

ギリシャ文字は、特に数学や物理学などの科学技術分野で非常によく使用される記号列であり、特定の意味を持...

CocosCreator 学習モジュールスクリプト

Cocos Creator モジュラースクリプトCocos Creator を使用すると、コードを複...

Python 仮想環境のインストールとアンインストールの方法と発生する問題

Ubuntu16.04 のインストールとアンインストール pip実験環境Ubuntu 16.04; ...

mysql 5.7.11 winx64.zip インストールと設定方法のグラフィックチュートリアル

MySql データベース システムをインストールして構成します。 1. ダウンロード http://...

MySQL 5.7を完全にアンインストールするための詳細な手順

この記事は主に、MySQLを再インストールする際のクリーンでないアンインストールのさまざまな問題をま...

MySQL インデックスの種類 (通常、ユニーク、フルテキスト) の説明

MySQL のインデックスの種類には、通常のインデックス、一意のインデックス、全文インデックスがあり...

SQLデータベースの14の事例の紹介

データシート /* Navicat SQLite データ転送 ソースサーバー: school ソース...

Mysql5.7.18 のインストールとマスタースレーブレプリケーションの詳細なグラフィック説明

CentOS6.7にmysql5.7.18をインストールする 1. /usr/localディレクトリ...

Docker ビルド kubectl イメージ実装手順

プログラムサービスがgitlab ci/cdと統合されたk8sを使用してデプロイされている場合、gi...

Vue のすべてのカプセル化方法の簡単な概要

目次1. カプセル化API 2. グローバルツールコンポーネントを登録する3. グローバル関数をカプ...