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ログに基づいてデータを復元するためのサンプルコードを実装します

推薦する

HTML 基本構造_Powernode Java アカデミー

多くの場合、Web ページ開発を学ぶときに最初に印象に残るのは、html または htm サフィック...

Jsモジュール化の動作原理とソリューションの詳細な説明

目次1. モジュラーコンセプト2. モジュール化3. モジュール化プロセス1. 通常の記述(グローバ...

vue3 を使用してマテリアル ライブラリを構築する方法

目次なぜマテリアルライブラリが必要なのでしょうか?材質は何ですか?素材の種類fuep、vue3 ベー...

SQL 実践演習: オンライン モール データベース ユーザー情報データ操作

オンラインショッピングモールデータベース - ユーザー情報データ運用プロジェクトの説明電子商取引の台...

ApacheのDjangoオンライン展開方法

環境: 1. Windows Server 2016 Datacenter 64 ビット 2. SQ...

1 つの記事で Nginx ロケーション マッチングの実装を理解する

チームはフロントエンドとバックエンドを分離しているため、フロントエンドが Nginx とノード層を引...

SSHパスワードフリーログイン設定方法の詳しい説明(画像とコマンド)

まず、私たちがやりたいことは、serverA の usera を使用して、パスワードなしで serv...

MySQL SQL 最適化チュートリアル: IN クエリと RANGE クエリ

まず、in() クエリについて説明します。 「High Performance MySQL」では、イ...

Tomcatc3p0 で jnid データ ソースを構成する 2 つの実装方法の分析

c3p0の使用c3p0jarパッケージをインポートする <!-- https://mvnrep...

MySQL での大規模トランザクションによって発生する挿入の遅延ケースの分析

【質問】 INSERT 文は最も一般的な SQL 文の 1 つです。最近、MySQL サーバーが同時...

Linuxのwatchコマンドの使用

1. コマンドの紹介watch コマンドは、指定されたコマンドを定期的に実行し、実行結果を全画面に表...

vue.js ルーターのネストされたルート

序文:ルートでは、主要部分は同じでも、基礎となる構造が異なることがあります。たとえば、ホームページに...

Vue-Routerのインストールと使用方法の詳細な説明

目次インストールルーティングの基本構成Vue にルーターをインストールするルーターの設定Router...

HTML+CSS を使用して、画像の右上隅に削除の十字と画像削除ボタンを追加します。

記録として、将来使用される可能性があり、困っている友人も使用できます。 BBはもうやめて、まずはレン...

CentOS システムでの JDK のインストールと設定の概要

目次序文OpenJDKの確認とアンインストールダウンロードした圧縮パッケージを使用してJDKをインス...