mysql トリガーの作成と使用例

mysql トリガーの作成と使用例

この記事では、MySQL トリガーを作成して使用する方法について説明します。ご参考までに、詳細は以下の通りです。

トリガーとは何か

  • トリガーは、特定のアクションの後または前にいくつかのアクションを「自動的に」実行するために使用されます。 (たとえば、新しい生徒情報が挿入された場合は、クラス テーブルで生徒数を変更する必要があります)。
  • 挿入、削除、更新トリガーを設定すると、挿入、削除、更新操作を実行すると、設定されたコンテンツが自動的にトリガーされます。
  • テーブルには最大 6 つのトリガー (3*2、3 つの操作*2 回 (前|後)) を設定できます。

トリガーを作成する

文法:

各行トリガー ステートメントに対して、テーブル名のイベントの前後にトリガー トリガー名を作成します。

  • 推奨されるトリガー名は、区別しやすい trigger_xxx です。トリガー名は繰り返すことはできません
  • before|after は、トリガー ステートメントの実行時間を表します。before の場合、トリガー ステートメントは挿入、削除、または更新操作の前に実行されます。after は後を意味します。
  • イベントは、挿入、削除、更新操作の 1 つです。
  • 各行は、任意のレコードに対して対応する操作を実行するトリガーです。
  • トリガー ステートメントは、トリガーが起動されたときに実行されるステートメントです。

MySQL 作成構文のキーワードの説明:

フィールド意味可能な値
定義者=オプションのパラメータ。作成者を指定します。デフォルトは現在ログインしているユーザー (CURRENT_USER) です。
トリガーはこのパラメータで指定されたユーザーによって実行されるため、権限を考慮する必要があります。
定義者='root@%'
定義者=現在のユーザー
トリガー名トリガー名は、テーブル名 + トリガー イベント キーワード + トリガー時間キーワードで構成するのが望ましいです。
トリガー時間特定のイベントの前または後のトリガー時間。ビフォー、アフター
トリガーイベント挿入時や削除時のトリガーなどのトリガー イベント。
INSERT : 挿入操作トリガー。INSERT、LOAD DATA、REPLACE の実行時にトリガーされます。
UPDATE : UPDATE 操作が発生したときにトリガーされる更新操作トリガー。
DELETE : DELETE および REPLACE 操作によってトリガーされる削除操作トリガー。
挿入、更新、削除
テーブル名トリガー操作時間のテーブル名。
トリガー順序同じトリガーイベントとトリガー時間を持つ複数のトリガーが定義されている場合のオプションパラメータ(
たとえば、BEFORE UPDATE など) の場合、デフォルトのトリガー順序はトリガーの作成順序と一致します。このパラメータを使用してトリガー順序を変更できます。このパラメータはMySQL 5.7.2以降でサポートされています。
FOLLOWS : 現在作成されているトリガーは、既存のトリガーの後にアクティブ化されます。
PRECEDES : 現在作成されているトリガーは、既存のトリガーの前にアクティブ化されます。
続く、先行する
トリガー本体実行をトリガーするSQL文の内容は、通常beginで始まりendで終わります。始まり .. 終わり

Mysql トリガーの使用例:

1. MySQL トリガー Insert は同じテーブルの更新をトリガーします。

以下にテーブル「 tmp1 」があり、tmp1 テーブルには 2 つの整数フィールド n1、n2 があります。レコードを tmp に挿入するときに、トリガーを使用してn2フィールドの値をn1フィールドの値の5倍に自動的に設定する必要があります。
テスト テーブルとトリガーを作成します。

-- テスト テーブルを作成します (存在する場合はテーブルを削除します tmp1)。
 
テーブル tmp1 (n1 int、n2 int) を作成します。
 
-- トリガー DELIMITER $ を作成
 
存在する場合はトリガーを削除する tmp1_insert$
 
トリガー tmp1_insert を作成する
 
tmp1 に挿入する前
 
各行ごとに
 
始める
 
  new.n2 = new.n1*5 と設定します。
 
終了$
 
区切り文字 ;

テストトリガー更新効果:

mysql> tmp1(n1) の値(18) を挿入します。
 
クエリは正常、1 行が影響を受けました (0.01 秒)
 
mysql> tmp1(n1) の値(99) を挿入します。
 
クエリは正常、1 行が影響を受けました (0.00 秒)
 
mysql> tmp1 から * を選択します。
 
+------+------+
 
| n1 | n2 |
 
+------+------+
 
| 18 | 90 |
 
| 99 | 495 |
 
+------+------+
 
セット内の 2 行 (0.00 秒)

2. MySQL トリガー更新トリガーは別のテーブルを更新します。

以下に、同じフィールドを持つ 2 つのテーブル tmp1 と tmp2 があります。トリガーを使用してテーブルの名前を更新すると、別のテーブルの名前も更新されます。
テスト テーブルとトリガーを作成します。

-- テスト テーブルを作成し、テスト データを挿入します (存在する場合はテーブルを削除します tmp1)。
 
tmp2 が存在する場合はテーブルを削除します。
 
テーブル tmp1 (id int、name varchar(128)) を作成します。デフォルトの文字セットは 'utf8' です。
 
テーブル tmp2 (fid int、name varchar(128)) を作成します。デフォルトの文字セットは 'utf8' です。
 
tmp1 に値(1, '爱E族')を挿入します。
 
tmp2 に値(1, '爱E族')を挿入します。
 
-- トリガー DELIMITER $ を作成
 
tmp1_update$ が存在する場合はトリガーを削除します
 
トリガー tmp1_update を作成する
 
tmp1 の更新後
 
各行ごとに
 
始める
 
  tmp2 を更新し、name=new.name、fid=new.id を設定します。
 
終了$
 
区切り文字 ;

テストトリガー更新効果:

mysql> tmp1 から * を選択します。
 
+------+---------+
 
| ID | 名前 |
 
+------+---------+
 
| 1 | ラブE族 |
 
+------+---------+
 
セット内の 1 行 (0.00 秒)
 
mysql> tmp2 から * を選択します。
 
+------+---------+
 
| fid | 名前 |
 
+------+---------+
 
| 1 | ラブE族 |
 
+------+---------+
 
セット内の 1 行 (0.00 秒)
 
mysql> tmp1 を更新し、name='aiezu.com' を設定し、id=1 にします。
 
クエリは正常、1 行が影響を受けました (0.00 秒)
 
一致した行: 1 変更された行: 1 警告: 0
 
mysql> tmp1 から * を選択します。
 
+------+------------+
 
| ID | 名前 |
 
+------+------------+
 
| 1 | aiezu.com |
 
+------+------------+
 
セット内の 1 行 (0.00 秒)
 
mysql> tmp2 から * を選択します。
 
+------+------------+
 
| fid | 名前 |
 
+------+------------+
 
| 1 | aiezu.com |
 
+------+------------+
 
セット内の 1 行 (0.00 秒)

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL トランザクション操作スキル」、「MySQL ストアド プロシージャ スキル」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQLトリガーの例の詳細な説明
  • MySQL でのトリガーとカーソルの紹介と使用
  • MySQLトリガーの使用と理解
  • MySQLでカーソルトリガーを使用する方法
  • MySQLトリガーの使用と注意すべき点
  • MySQL トリガーの使用シナリオとメソッドの例
  • MySQLデータベーストリガーの詳細な説明
  • MySql ビュー、トリガー、ストアド プロシージャに関する簡単な説明
  • MySQL トリガーの基本的な使い方(作成、表示、削除など)の詳細な説明
  • MySQLトリガーの使用

<<:  Docker でリモートの安全なアクセスを有効にする方法の詳細なグラフィック チュートリアル

>>:  Vueはショッピングカート決済機能をシミュレートします

推薦する

webpack と rollup を使用してコンポーネント ライブラリをパッケージ化する方法

序文以前、ローディングスタイルのコンポーネントを作成しました。コードの再利用性を実現するために、この...

JavaScript でツリー構造を構築するための効率的なアルゴリズムについての簡単な説明

目次導入アイデアID配列インデックスのマッピング関係を確立するツリー構造の構築原理要約する導入組織階...

Centos7サーバーの基本的なセキュリティ設定手順

pingスキャンをオフにする(役に立たないが)まずルートに切り替えるエコー 1 > /proc...

Nginx ログ出力のリクエスト後パラメータを設定する方法

【序文】当プロジェクトの SMS 機能は、第三者に接続することです。第三者からの元の受信確認要求は ...

JavaScript マクロタスクとマイクロタスクの実行順序についての簡単な説明

目次1. JavaScriptはシングルスレッドです1. 同期タスク2. 非同期タスク2. タスクキ...

JavaScript を使用して動的な QQ 登録ページを作成する

目次1. はじめに1. 基本レイアウト2. 写真を自動的に切り替える3. コンテンツを追加する4. ...

ウェブページ(ウェブサイト)のデザインと制作に関する考えや経験の共有

まずは投稿する前に! 「I Want to Study on My Own!」に改めて感謝します。た...

Nginx 構成検出サービスのステータスを実装する方法

1. チェックステータスモジュールがインストールされているかどうかを確認します。 [root@loc...

React で Antd の Form コンポーネントを使用してフォーム機能を実装する方法

1. 構造部品1. フォームには、入力コントロール、標準フォーム フィールド、ラベル、ドロップダウン...

VS2022 リモート デバッグ ツールの使い方

WeChat 関連サービスをデバッグする場合など、職場のサーバー環境でリモートデバッグを行う必要があ...

ウェブデザインにおけるカラーマッチングの優れた例30選

本日は、色彩の応用に関する優れた事例を 30 件集めて、皆さんにご紹介したいと思います。これらの事例...

JavaScriptのvar let constの違いは何ですか?

目次1. 繰り返し宣言1.1 変数1.2 しましょう1.3 定数2. 可変プロモーション2.1 変数...

HTML における src と href の違いについての簡単な説明

簡単に言うと、srcは「このリソースをロードしたい」という意味で、hrefは「このリソースに関連付け...

HTML シンプルショッピング数量アプレット

この記事では、参考までにシンプルなHTMLショッピング数量アプレットを紹介します。具体的な内容は次の...

単一選択折りたたみメニュー機能を実現するCSS

前回の「最もシンプルなスイッチを実現するCSS」のように、HTML5とCSS3でほとんどの機能をすで...