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

推薦する

IDEA は Docker プラグインを使用します (初心者向けチュートリアル)

目次例示する1. Dockerリモートアクセスを有効にする2. Dockerに接続する3. イメージ...

VMware12.0 インストール Ubuntu14.04 LTS チュートリアル

私は、デスクトップ バージョンとサーバー バージョンの両方で、仮想マシンにさまざまなイメージを何度も...

Windows で Mysql を起動したときに 1067 が表示される場合の解決策

数日前に仕事を始めて、Mysql をインストールしたところ、開くことができました。今日、会社に行った...

コード標準では、SQL ステートメントに結合が多すぎないようにする必要があるのはなぜですか?

無料ポイントインタビュアー:Linuxを使ったことはありますか?私:はいインタビュアー:メモリ使用量...

Datagrip2020 が MySQL ドライバーのダウンロードに失敗する

「downloadlaod」を直接クリックしてもダウンロードできない場合は、ここからダウンロードす...

フロントエンドはJavaScriptを通じてCADグラフィックスの詳細を作成および変更します。

目次1. 現状2. JSでCADグラフィックを作成および変更する2.1 サポートされているCADエン...

入力のsize属性とmaxlength属性の違い

最近、プロジェクトで input size 属性と maxlength 属性を使用しました。以前は、...

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

この記事は、参考のためにMySQL 8.0.19のインストールと設定のグラフィックチュートリアルを記...

Winows Server 2019 アクティベーション コードとボリューム ライセンス エディション KMS インストール キー GVLK

最近、社内文書の整理とファイルサーバーの構成を予定しています。以前はサーバー2003を使い慣れていま...

Nginxポーリングアルゴリズムの基本的な実装方法の詳細な説明

ポーリングアルゴリズムの紹介多くの人が職場で nginx を使用しており、その設定に精通しています。...

MYSQL(電話番号、IDカード)データ非感応化の実装

1. データ感度低下の説明日常の開発ニーズでは、データの感度低下が頻繁に発生します。たとえば、ID ...

CentOS 8 に MySql をインストールしてリモート接続を許可する方法

ダウンロードしてインストールします。まず、システムに MySQL または MariaDB があるかど...

JS配列インデックス検出におけるデータ型の問題の詳細な説明

WeChat アプレット プロジェクトを書いていたとき、その中に「都市選択」機能がありました。作者は...

CSS を使用して要素のスクロールバーを非表示にするサンプルコード

どの要素でもスクロールできるようにしながら、スクロールバーを非表示にするにはどうすればよいでしょうか...

Nginx インストールの詳細なチュートリアル

1. Nginxの簡単な紹介Nginx は、無料のオープンソースの高性能 HTTP サーバーおよびリ...