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

推薦する

JavaScript の 3 つの BOM オブジェクト

目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...

ウェブページでグレーまたはブラックモードを実現するための CSS3 フィルターコード

フロントエンドcss3 フィルターは、Web ページのグレー効果を実現できるだけでなく、ナイト モー...

CSS background-blend-modeの仕組みを深く理解する

この記事は共有および集約することを歓迎します。全文を転載する必要はありません。著作権を尊重してくださ...

ウェブデザイナーが注意すべき 43 のウェブデザインの間違い

これはウェブサイトのユーザビリティに関する記事です。著者は自身の経験に基づいて、ウェブサイトのデザイ...

Flex モバイルレイアウトにおけるシングルラインレイアウトとダブルラインレイアウトの違いと使い方

レイアウトにul>liを使用した単一行レイアウトを以下に示します。 <ul class=...

MySQL データ型 DECIMAL の詳細な分析

序文:金額の保存など、小数点数を保存し、精度要件がある場合、通常は DECIMAL フィールド タイ...

nginx rewriteを使用してURLをリダイレクトする方法

最近仕事でnginxの設定を変更する必要が頻繁にあり、nginxでrewriteを使用する方法を学び...

HTML の順序付きリスト、順序なしリスト、定義リストに関する簡単な説明

順序付きリストXML/HTML コードコンテンツをクリップボードにコピー<オルタイプ= &qu...

mysql 8.0.12 winx64 のダウンロードとインストールのチュートリアル

MySQL 8.0.12のダウンロードとインストールのチュートリアルは参考までに、具体的な内容は次の...

jquery+springbootでファイルアップロード機能を実現

この記事の例では、ファイルアップロード機能を実現するためのjquery+springbootの具体的...

パーティショニングを使用して数十億のデータに対する MySQL データ処理を最適化する方法

MySQL が数千万のデータをクエリする場合、ほとんどのクエリ最適化の問題はインデックスを通じて解決...

HTML テーブル マークアップ チュートリアル (1): テーブルの作成

<br />これは 123WORDPRESS.COM が提供する一連のチュートリアルです...

純粋な CSS3+DIV で小さな三角形の境界線効果を実現するためのサンプル コード

具体的なコードは次のとおりです。 HTMLコードは次のとおりです <div class=&qu...

MySQL トランザクション制御フローと ACID 特性

目次1. ACIDの特性トランザクション制御構文3. トランザクション同時実行例外1. ダーティリー...