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

推薦する

Linux ssh サービス情報と実行ステータスを表示する方法

Linux での ssh サービス構成など、ssh サーバー構成に関する記事は多数あります。ここでは...

mysql-8.0.19-winx64 をインストールしてログインするための初心者向けチュートリアル (初心者必読)

目次1. インストールパッケージ(64ビット)をダウンロードする2. MySQLデータベースをインス...

MySQL 8.0.18 のインストールと設定のグラフィックチュートリアル

学習目標: Windowsシステムを使用してMySQLデータベースをインストールする方法を学びます。...

Linux 型バージョン メモリ ディスク クエリ コマンド紹介

1. まず、Linux システムのバージョン内容について概要を説明します。 1. カーネルバージョン...

Linux でも利用できる人気の Windows アプリ 10 選

データ分析会社Net Market Shareによると、Linuxデスクトップオペレーティングシステ...

プログレッシブ ウェブ アプリ (PWA) の開発方法

目次概要必要とするアプリURL PWA にはどのような技術コンポーネントが必要ですか?マニフェストフ...

アーティストの自己啓発におけるいくつかの経験

会社の影響力が拡大し、製品が改良され続けるにつれて、関連するイメージデザインもそれに追いつき、徐々に...

jQueryカルーセル機能を実装する方法

この記事では、jQueryカルーセル機能の実装コードを参考までに共有します。具体的な内容は次のとおり...

MySQLの日付加算と減算関数の詳細な説明

1. 追加時間()指定した秒数を日付に追加する select addtime(now(),1); -...

MySQL の時間設定に関する考慮事項の詳細な要約

時間は本当に存在するのでしょうか?時間は人間が考え出した概念に過ぎず、物事の変化を測る基準に過ぎない...

Node-Redを使用してMySQLデータベースに接続する方法

Node-red をデータベース (mysql) に接続するには、まずコンピューターに MySQL ...

my.cnf (my.ini) 重要なパラメータの最適化設定手順

MyISAM ストレージエンジンMyISAM ストレージ エンジンは、書き込みよりも読み取りが多く、...

nginx は画像表示の遅さとダウンロードの不完全さの問題を解決します

前面に書かれた最近、ある読者から、ブラウザからサーバーにアクセスすると、画像の表示が遅く、ブラウザに...

vue の webpack -v エラー解決の概要

XiaobaiはVueについて学び、次にwebpackについて学び、そしてさまざまなものをインストー...

Linux仮想マシンをWiFiに接続する方法

生活の中で、インターネットはどこにでもあります。インターネットを通じてゲームをしたり、テレビ番組を見...