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はショッピングカート決済機能をシミュレートします

推薦する

vue ディレクティブ v-bind の使用と注意点

目次1. v-bind: 要素の属性にデータをバインドできる2. v-bind: は次のように省略で...

HTML テーブル マークアップ チュートリアル (42): テーブル ヘッダーの水平方向の配置属性 ALIGN

水平方向では、テーブル ヘッダーの配置を左、中央、右に設定できます。基本的な構文<TH ALI...

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

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

DockerにTomcat8をインストールする方法

1. dockerでtomcat8をインストールする1. Docker HubでTomcatイメージ...

MySQL 分離列とプレフィックスインデックスの使用の概要

目次データ列を分離するプレフィックスインデックスとインデックスの選択性データ列を分離するMySQL ...

Vueルーティング相対パスジャンプメソッド

目次Vueルーティング相対パスジャンプ1. 属性の追加2.router.resolveメソッドVue...

Vue 開発ツリー構造コンポーネント (コンポーネント再帰)

この記事では、Vue開発ツリー構造コンポーネントの具体的なコードを例として紹介します。具体的な内容は...

Vue3サンドボックスの仕組みの詳しい説明

目次序文ブラウザコンパイル版ローカルプリコンパイルバージョン要約する参照する序文vue3サンドボック...

CSS でフロートとマージンを混合するサンプルコード

最近の勉強で、GitHub でレイアウトの練習をいくつか見つけたのですが、レイアウトにまったく慣れて...

React コンポーネント間で通信する 3 つの方法 (シンプルで使いやすい)

目次1. 親子コンポーネント通信2. クロスレベルコンポーネント通信1. レイヤーごとに値を渡す2....

JavaScript を使用して文字列内の最も繰り返しの多い文字を取得する方法

目次トピック分析する使用目的解決:コードは次のように実装されます。分析:配列とポインタ解決:コードは...

Gitlab-ci を使用してリモート マシンに継続的にデプロイする方法 (詳細なチュートリアル)

簡単に言うと、今日は Gitlab-CI を使用してリモート サーバーに自動的にデプロイする方法につ...

HTMLテキストオーバーフローの2つの一般的な解決策は省略記号を表示することです

方法1: CSSオーバーフロー省略を使用して解決する解決策は次のとおりです。 CSSコード: ディス...

Linux での tcpdump コマンドの詳細な分析と使用方法

導入簡単に言えば、tcpdump は、ネットワーク上のトラフィックをダンプし、ユーザーの定義に従って...

CSS3は、変換変形とイベントを組み合わせて扇形のナビゲーションを完成させます。

この場合、transition という単語を間違って書いたため、午後中ずっとそれに取り組みました。本...