MySQL トリガーの基本的な使い方(作成、表示、削除など)の詳細な説明

MySQL トリガーの基本的な使い方(作成、表示、削除など)の詳細な説明

この記事では、例を使用して MySQL トリガーの基本的な使用方法を説明します。ご参考までに、詳細は以下の通りです。

1. MySQLトリガーの作成:

1. MySQLトリガー作成構文:

CREATE [定義者 = { 'user' | CURRENT_USER }] 
トリガー トリガー名
トリガー時間 トリガーイベント
ON テーブル名
各行ごとに
[トリガー順序]
トリガー本体

2. 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で終わります。始まり .. 終わり

3. トリガー実行ステートメントの内容 (trigger_body) の OLD、NEW:

trigger_body では、挿入する新しい行を示すために NEW を使用し (MS SQL のINSERTEDに相当)、削除する古い行を示すために OLD を使用できます (MS SQL のDELETEDに相当)。トリガー操作で簡単に使用できるように、OLD と NEW からフィールドの内容を取得します。対応するイベントが OLD と NEW をサポートするかどうかの関係は次のとおりです。

イベント古い新しい
入れる×
消去 ×
アップデート

UPDATE古い行 (OLD) を削除して新しい行 (NEW) を挿入することと同じなので、UPDATE は OLD と NEW の両方をサポートします。

4. MySQL 区切り文字 (DELIMITER):

MySQL はデフォルトで「;」を区切り文字として使用し、「;」に遭遇すると SQL ステートメントが送信されます。トリガーには複数の「;」文字が含まれている可能性があります。トリガー作成ステートメントが途中で送信されないようにするには、MySQL 区切り文字を一時的に変更し、作成後に区切り文字を元に戻す必要があります。次のように区切り文字を変更するには、 DELIMITER使用します。

区切り文字 $
... --トリガー作成ステートメント;
$ --作成ステートメントを送信します。
区切り文字 ;

2. 高度なMySQLトリガーの作成:

1. MySQL トリガーで変数を使用する:

MySQL トリガーでは、変数の前に '@' が付き、定義なしで直接使用できます。

--変数の直接割り当て set @num=999;
 
-- 選択ステートメントのデータを使用して値を割り当てます。括弧が必要です。
@name を設定します (テーブルから名前を選択します)。

2. MySQL トリガーで if ステートメントを使用して条件判断を行います。

-- 単純な if 文:
性別を、if (new.sex=1, '男性', '女性') に設定します。
 
--複数の条件付き if ステートメント:
old.type=1の場合
  テーブルを更新します...;
そうでない場合は、old.type=2 の場合
  テーブルを更新します...;
終了の場合;

3. MySQL ビュートリガー:

show triggers; 」を使用してトリガーを表示できます。 MySQL によって作成されたトリガーはinformation_schemaライブラリのtriggersテーブルに保存されるため、このテーブルをクエリしてトリガーを表示することもできます。

-- information_schema.triggers テーブルを通じてトリガーを表示します。
information_schema.triggers から * を選択します。
 
--mysql は現在のデータベースを表示するためのトリガーを表示します。
 
-- mysql は指定されたデータベース「aiezu」の aiezu からのトリガーを表示します。

4. MySQL削除トリガー:

1. トリガーを削除するには、ドロップ トリガーを使用します。

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


2. 削除する前にトリガーが存在するかどうかを確認します。

トリガーが存在する場合は削除する trigger_name


5. Msqlトリガーの使用例:

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

以下にテーブル「 tmp1 」があり、 tmp1 テーブルには 2 つの整数フィールドn1n2があります。レコードを 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 トリガー更新トリガーは別のテーブルを更新します。

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

テスト テーブルとトリガーを作成します。

-- テスト テーブルを作成し、テスト データを挿入します (存在する場合はテーブルを削除します 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トリガーの使用

<<:  Nexusプライベートサーバー構築原理とチュートリアル分析

>>:  Centos7はMySQLログに基づいてデータを復元するためのサンプルコードを実装します

推薦する

MySQL 8.0.15 winx64 解凍版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.15 winx64解凍版のインストールと設定方法を紹介します。具体...

Hadoop におけるネームノードとセカンダリネームノードの動作メカニズムの説明

1) プロセス 2) FSImageと編集NodeNode は HDFS の頭脳です。ファイルシステ...

jsでユーザー登録機能を実装する

この記事の例では、ユーザー登録機能を実装するためのjsの具体的なコードを参考までに共有しています。具...

H5レイアウト実装手順における天井と底部の吸引を解決するための純粋なCSS

どのような製品について言及したいですか?最近、ユーザーがマーケティングの変化をよりよく観察できるよう...

Dockerコンテナのインポ​​ートとエクスポートに関するチュートリアル

背景Docker の人気は、コンテナの共有と移植が容易であることと密接に関係しています。ユーザーは、...

MySQL ベストプラクティス: パーティションテーブルの基本タイプ

MySQL パーティションテーブルの概要MySQL の人気が高まるにつれて、MySQL に保存される...

js で継承を実装する 5 つの方法

コンストラクタの借用この手法の基本的な考え方は単純です。サブタイプ コンストラクター内からスーパータ...

Ubuntu 18.04 MySQL 8.0 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0のインストールと設定方法を参考までに紹介します。具体的な内容は以下の...

ApacheBench でマルチ URL をサポートする方法

標準の ab は単一の URI でのストレス テストのみをサポートしており、実際のニーズを満たしてい...

DockerはClickHouseをインストールし、データテストを初期化します

クリックハウスの紹介ClickHouse は、SQL クエリを使用して分析データ レポートをリアルタ...

html-webpack-plugin' を使用してメモリ内に HTML ページ プラグインを生成します。

webpackjs ファイルをパッケージ化するときに、次に示すように、index.html インタ...

DockerコンテナのライフサイクルアーキテクチャとVMとの違いについて詳しく説明します。

コンテナのライフサイクルコンテナランタイムのライフサイクルコンテナは、分離特性を持つプロセスのセット...

Linux ディスク管理 LVM の使用

1. LVM の概要Linux ディスクを管理するときに、このような状況に遭遇することがよくあります...