MySQLトリガーの使用法

Dec 12, 2016 am 11:53 AM
mysqlトリガー

MySQL にはトリガーのサポートが含まれています。トリガーは、テーブル操作に関連するデータベース オブジェクトです。トリガーが配置されているテーブルで指定されたイベントが発生すると、オブジェクトが呼び出されます。つまり、テーブルの操作イベントがテーブルでのトリガーの実行をトリガーします。

トリガーを作成する
MySQL では、トリガーを作成するための構文は次のとおりです:

CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt
ログイン後にコピー

その中に:

trigger_name: ユーザーが指定したトリガー名を識別します。
trigger_time: トリガー時間を識別します。前または AFTER;
trigger_event: トリガー イベントを識別します。値は INSERT、UPDATE、または DELETE;
tbl_name: トリガーを作成するテーブル名、つまりトリガーが作成されるテーブルを識別します。
trigger_stmt: トリガー プログラム本体 (SQL ステートメント、または使用可能) BEGIN と END には複数のステートメントが含まれます。

6 種類のトリガー、つまり BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER を作成できることがわかります。 削除後に更新してください。

もう 1 つの制限は、テーブル上に同じタイプの 2 つのトリガーを同時に作成できないことです。そのため、テーブル上に作成できるトリガーは最大 6 つです。

trigger_eventの詳細説明
INSERT、UPDATE、DELETEを除くMySQL 基本的な操作の定義に加えて、LOAD DATA ステートメントと REPLACE ステートメントも定義されており、これらにより上記の 6 種類のトリガーをトリガーすることもできます。

LOAD DATA ステートメントは、ファイルをデータテーブルにロードするために使用されます。これは、一連の INSERT 操作と同等です。

REPLACE ステートメントは一般的に INSERT ステートメントと非常によく似ていますが、テーブルに主キーまたは一意のインデックスがある場合、挿入されたデータが元のデータと異なる場合が異なります。 主キーまたは一意のインデックスが一致している場合、最初に元のデータが削除され、その後新しいデータが追加されます。つまり、REPLACE ステートメントは 1 つと同等である場合があります。

INSERT ステートメントは、DELETE ステートメントに INSERT ステートメントを加えたものと同等になる場合があります。

INSERT タイプのトリガー: トリガーは行が挿入されるときにアクティブ化され、INSERT、LOAD DATA、および REPLACE ステートメントによってトリガーされる場合があります。 タイプ・トリガー: トリガーは、特定の行が変更されたときにアクティブ化され、UPDATE ステートメントによってトリガーされる可能性があります。
DELETE タイプ・トリガー: トリガーは、特定の行が削除されたときにアクティブ化されます。 DELETE および REPLACE ステートメントがトリガーされます。

BEGIN … END 詳細説明

MySQL では、BEGIN … END ステートメントの構文は次のとおりです:

BEGIN

[statement_list]
END
そのうち、statement_list 1 つ以上のステートメントのリストを表します。リスト内の各ステートメントはセミコロン (;) で終了する必要があります。
MySQL では、セミコロンはステートメントの終わりの識別子です。セミコロンに遭遇すると、ステートメントが終了し、MySQL が実行を開始できることを意味します。したがって、インタプリタはstatement_listに遭遇します。 実行は のセミコロンの後に開始され、BEGIN に一致する END が見つからないため、エラーが報告されます。

このとき DELIMITER コマンドが使用されます (DELIMITER は区切り文字、つまり区切り文字です)。これはコマンドであり、文の終わりの識別子は必要ありません。 構文は次のとおりです。 new_delimiter

new_delimiter 1 つ以上の長さの記号を設定できます。デフォルトはセミコロン (;) で、$:
DELIMITER などの他の記号に変更できます。 $
これ以降のステートメントはセミコロンで終了し、インタープリターは $ が出現した場合にのみ、ステートメントが終了したとみなされます。使用後は、忘れずに変更して戻す必要があることに注意してください。

トリガー作成の完全な例

システムに 2 つのテーブルがあるとします。

クラス テーブル class(クラス番号 classID、クラス内の生徒数 stuCount)
Student テーブル Student(学生番号 stuID, クラス番号 classID)
学生が追加されたときにクラス テーブルの学生数を自動的に更新するトリガーを作成するには、コードは次のとおりです。

DELIMITER $
create trigger tri_stuInsert after insert
on student for each row
begin
declare c int;
set c = (select stuCount from class where classID=new.classID);
update class set stuCount = c + 1 where classID = new.classID;
end$
DELIMITER ;
ログイン後にコピー

変数の詳細な説明 MySQL で DECLARE を使用して、ローカル変数を定義します。この変数は BEGIN...END でのみ使用できます。 これは複合ステートメントで使用され、複合ステートメントの先頭、つまり他のステートメントの前に定義する必要があります。 構文は次のとおりです:


DECLARE var_name[,...] type [DEFAULT value]

ここで:

var_name は SQL と同じ変数名です。 ステートメントは同じであり、変数名は大文字と小文字が区別されません。型は MySQL でサポートされる任意のデータ型です。同じ型の複数の変数をカンマで区切って同時に定義できます。必要に応じて、使用できます DEFAULT 句は、式として指定できるデフォルト値を提供します。

変数の割り当てには SET ステートメントを使用します。構文は次のとおりです:

SET var_name = expr [,var_name = expr] ...

NEW と OLD の詳細な説明

上記の例では NEW キーワードが使用されており、 MS SQL Server の INSERTED と DELETED は、MySQL で定義されるものと似ています。 古い、

を表すために使用されます

トリガーが配置されているテーブル内の、トリガーをトリガーしたデータの行。
具体的には:
INSERT タイプのトリガーでは、NEW (BEFORE) 挿入される新しいデータ、または (AFTER) 挿入された新しいデータを表すために使用されます。 UPDATE タイプのトリガーでは、OLD は変更される、または変更された元のデータを表すために使用されます。 変更される、または変更された新しいデータを表すために使用されます。
DELETE タイプのトリガーでは、削除される、または削除された元のデータを表すために使用されます。 NEW.columnName (columnNameは対応するデータテーブルの列名です)
さらに、OLDは読み取り専用ですが、NEWはトリガーでSETを使用できます トリガーが再びトリガーされて循環呼び出しが発生しないように、値を割り当てます (たとえば、学生を挿入する前に、学生番号の前に「2013」を追加します)。

トリガーの表示


は、データベースの表示 (show Databases;) およびテーブルの表示 (show tables;) と同じです。 トリガーの表示の構文は次のとおりです:

SHOW TRIGGERS [FROM schema_name];

ここで、schema_name は次のとおりです。 MySQL のスキーマの名前 スキーマとデータベースは同じです。つまり、データベース名を指定できるため、最初に「USE database_name;」を行う必要はありません。


トリガーの削除

データベースやテーブルの削除と同様に、トリガーを削除する構文は次のとおりです:


DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

トリガーの実行順序

作成したデータベースこれは通常 InnoDB データベースであり、その上に作成されたテーブルはトランザクション テーブル、つまりトランザクション セーフです。このとき、SQL ステートメントまたはトリガーの実行に失敗すると、MySQL トランザクションは以下を含めてロールバックされます:


① BEFORE トリガーの実行に失敗した場合、SQL は正しく実行できません。

②SQLの実行が失敗した場合、AFTERトリガーは起動しません。

③アフター タイプのトリガーの実行に失敗すると、SQL はロールバックされます。

皆さん、mysql トリガーの使用についてはある程度理解できましたか? ご質問があれば、メッセージを残してください。一緒に進歩していきます。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Mar 19, 2025 pm 03:51 PM

この記事では、MySQLのAlter Tableステートメントを使用して、列の追加/ドロップ、テーブル/列の名前の変更、列データ型の変更など、テーブルを変更することについて説明します。

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? Mar 18, 2025 pm 12:01 PM

記事では、証明書の生成と検証を含むMySQL用のSSL/TLS暗号化の構成について説明します。主な問題は、セルフ署名証明書のセキュリティへの影響を使用することです。[文字カウント:159]

MySQLの大きなデータセットをどのように処理しますか? MySQLの大きなデータセットをどのように処理しますか? Mar 21, 2025 pm 12:15 PM

記事では、MySQLで大規模なデータセットを処理するための戦略について説明します。これには、パーティション化、シャード、インデックス作成、クエリ最適化などがあります。

人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? 人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? Mar 21, 2025 pm 06:28 PM

記事では、MySQLワークベンチやPHPMyAdminなどの人気のあるMySQL GUIツールについて説明し、初心者と上級ユーザーの機能と適合性を比較します。[159文字]

ドロップテーブルステートメントを使用してMySQLにテーブルをドロップするにはどうすればよいですか? ドロップテーブルステートメントを使用してMySQLにテーブルをドロップするにはどうすればよいですか? Mar 19, 2025 pm 03:52 PM

この記事では、ドロップテーブルステートメントを使用してMySQLのドロップテーブルについて説明し、予防策とリスクを強調しています。これは、バックアップなしでアクションが不可逆的であることを強調し、回復方法と潜在的な生産環境の危険を詳述しています。

INNODBフルテキスト検索機能を説明します。 INNODBフルテキスト検索機能を説明します。 Apr 02, 2025 pm 06:09 PM

INNODBのフルテキスト検索機能は非常に強力であり、データベースクエリの効率と大量のテキストデータを処理する能力を大幅に改善できます。 1)INNODBは、倒立インデックスを介してフルテキスト検索を実装し、基本的および高度な検索クエリをサポートします。 2)一致を使用してキーワードを使用して、ブールモードとフレーズ検索を検索、サポートします。 3)最適化方法には、単語セグメンテーションテクノロジーの使用、インデックスの定期的な再構築、およびパフォーマンスと精度を改善するためのキャッシュサイズの調整が含まれます。

外国の鍵を使用して関係をどのように表現しますか? 外国の鍵を使用して関係をどのように表現しますか? Mar 19, 2025 pm 03:48 PM

記事では、外部キーを使用してデータベース内の関係を表すことで、ベストプラクティス、データの完全性、および避けるべき一般的な落とし穴に焦点を当てています。

JSON列にインデックスを作成するにはどうすればよいですか? JSON列にインデックスを作成するにはどうすればよいですか? Mar 21, 2025 pm 12:13 PM

この記事では、クエリパフォーマンスを強化するために、PostgreSQL、MySQL、MongoDBなどのさまざまなデータベースでJSON列にインデックスの作成について説明します。特定のJSONパスのインデックス作成の構文と利点を説明し、サポートされているデータベースシステムをリストします。

See all articles