MySQL トリガーの紹介、トリガーの作成、使用制限の分析

MySQL トリガーの紹介、トリガーの作成、使用制限の分析

この記事では、例を使用して、MySQL トリガーの概要、トリガーの作成方法、およびトリガーの使用上の制限について説明します。ご参考までに、詳細は以下の通りです。

導入

SQL トリガーは、データベース カタログに保存される一連の SQL ステートメントです。 SQL トリガーは、挿入、更新、削除など、テーブルに関連付けられたイベントが発生するたびに実行または起動されます。 SQL トリガーは、特別なタイプのストアド プロシージャと見なすこともできます。 ストアド プロシージャのように直接呼び出されないため、特別です。 トリガーとストアド プロシージャの主な違いは、トリガーはテーブルでデータ変更イベントが実行されると自動的に呼び出されるのに対し、ストアド プロシージャは明示的に呼び出す必要があることです。

次に、SQL トリガーの利点を見てみましょう。

  • SQL トリガーは、データの整合性をチェックする代替方法を提供します。
  • SQL トリガーは、データベース層のビジネス ロジックのエラーをキャッチできます。
  • SQL トリガーは、スケジュールされたタスクを実行する別の方法を提供します。 SQL トリガーを使用すると、テーブル内のデータに変更が加えられる前または後にトリガーが自動的に呼び出されるため、スケジュールされたタスクの実行を待つ必要がなくなります。
  • SQL トリガーは、テーブル内のデータの変更を監査するのに非常に便利です。

その欠点を見てみましょう:

  • SQL トリガーは拡張検証のみを提供でき、すべての検証を置き換えることはできません。アプリケーション層でいくつかの簡単な検証を実行する必要があります。 たとえば、JavaScript を使用してクライアント側でユーザー入力を検証したり、JSP、PHP、ASP.NET、Perl などのサーバー側スクリプト言語を使用してサーバー側でユーザー入力を検証したりできます。
  • クライアント アプリケーションからの SQL トリガーの呼び出しと実行は表示されないため、データベース層で何が起こっているかを把握するのは困難です。
  • SQL トリガーはデータベース サーバーにオーバーヘッドを追加する可能性があります。

トリガーは特別なタイプのストアド プロシージャなので、どのように選択すればよいのでしょうか。以下は単なる提案です。ストアド プロシージャを使用して作業を完了できない場合は、SQL トリガーの使用を検討できます。

トリガーを作成する

MySQL では、トリガーは、関連付けられたテーブルのデータに変更が加えられたときに自動的に呼び出される一連の SQL ステートメントです。 トリガーは、挿入、更新、または削除ステートメントによってデータが変更される前または後に呼び出されるように定義できます。 MySQL 5.7.2 より前では、テーブルごとに最大 6 つのトリガーを定義できました。彼らの簡単な紹介を見てみましょう:

  • BEFORE INSERT − トリガーはデータがテーブルに挿入される前にアクティブ化されます。
  • AFTER INSERT − データがテーブルに挿入された後にトリガーをアクティブにします。
  • BEFORE UPDATE − テーブル内のデータが更新される前にトリガーをアクティブにします。
  • AFTER UPDATE − テーブル内のデータが更新された後にトリガーをアクティブにします。
  • BEFORE DELETE − テーブルからデータが削除される前にトリガーがアクティブ化されます。
  • AFTER DELETE − テーブルからデータが削除された後にトリガーがアクティブになります。

ただし、MySQL 5.7.2 以降では、同じトリガー イベントとアクション時間に対して複数のトリガーを定義できます。 INSERT、DELETE、または UPDATE ステートメントを使用せずにテーブル内のデータを変更するステートメントを使用すると、テーブルに関連付けられたトリガーは呼び出されません。 たとえば、truncate ステートメントはテーブル内のすべてのデータを削除しますが、テーブルに関連付けられたトリガーは呼び出しません。ただし、REPLACE ステートメントや LOAD DATA ステートメントなど、一部のステートメントではバックグラウンド INSERT ステートメントが使用されます。これらのステートメントを使用すると、テーブルに関連付けられた対応するトリガーが呼び出されます。したがって、テーブルに関連付けられたトリガーごとに一意の名前を使用する必要があります。異なるテーブルに対して同じトリガー名を定義することをお勧めします。トリガーを定義するための構文構造を見てみましょう。

(BEFORE | AFTER)_テーブル名_(INSERT| UPDATE | DELETE)

たとえば、before_order_update は、orders テーブルの行が更新される前に呼び出されるトリガーです。別の定義方法を見てみましょう。

テーブル名_(BEFORE | AFTER)_(INSERT | UPDATE | DELETE)

たとえば、order_before_update は、上で説明した before_order_update トリガーと同じです。

MySQL はトリガーをデータ ディレクトリ (例: /data/luyaran/) に保存し、tablename.TRG および triggername.TRN という名前のファイルを使用します。

  • tablename.TRG ファイルは、トリガーを対応するテーブルにマップします。
  • triggername.TRN ファイルにはトリガー定義が含まれています。

したがって、トリガー ファイルをバックアップ フォルダーにコピーすることで、mysql トリガーをバックアップできます。また、mysqldump ツールを使用してトリガーをバックアップすることもできます。

使用制限

MySQL トリガーは標準 SQL で定義されているすべての機能をカバーしますが、アプリケーションで使用する場合にはいくつかの制限があります。

  • SHOW、LOAD DATA、LOAD TABLE、BACKUP DATABASE、RESTORE、FLUSH、および RETURN ステートメントで使用されます。
  • COMMIT、ROLLBACK、START TRANSACTION、LOCK/UNLOCK TABLES、ALTER、CREATE、DROP、RENAME など、暗黙的または明示的にコミットまたはロールバックするステートメントを使用します。
  • PREPARE、EXECUTE などの準備済みステートメントを使用します。
  • 動的 SQL ステートメントを使用します。

さて、この記録についてはこれですべてです。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL トランザクション操作スキル」、「MySQL ストアド プロシージャ スキル」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL トリガー構文とアプリケーション例
  • MySql ビュー トリガー ストアド プロシージャの詳細な説明
  • MySQL トリガーの原理と使用例の分析
  • MySQL ログトリガー実装コード
  • MySQL トリガーの追加、削除、変更、クエリ操作の例
  • MySQL トリガー: 複数のトリガー操作の作成例の分析
  • MySQL トリガー: トリガーの作成と使用
  • MySQL トリガーの定義と使用方法の簡単な例
  • MySQLトリガーの概念、原理、使用法の詳細な説明
  • MySQL でトリガーを無効化および有効化するチュートリアル [推奨]
  • MySQLデータベーストリガーの詳細な説明

<<:  シェルスクリプトを使用して CentOS7 に python3.8 環境をインストールする (推奨)

>>:  Vueカスタムツリーコントロールの使い方の詳細な説明

推薦する

スパンの最小高さを定義するソリューションは効果がありません

span タグは HTML ウェブページを作成するときによく使用されますが、このタグの使い方がよくわ...

ネイティブ JavaScript でシンプルな Gobang ゲームを実装する

この記事では、JavaScriptで簡単なGobangゲームを実装するための具体的なコードを参考まで...

Nginx 運用保守ドメイン名検証方法例

インターフェイス ドメイン名を構成する際、各パブリック プラットフォームはドメイン名に対する開発者の...

Vueはプログレスバーの変更効果を実現します

この記事ではVueを使ってプログレスバーの変更を簡単に実装してみましたので参考にしてください。具体的...

HTML の長いテキストは、タグの幅を超えると自動的に切り捨てられます。

長いテキストを表示する場合、C# 側で文字をインターセプトする必要があることがよくありますが、長いテ...

MySQLのメモリ使用量を表示する方法の詳細な説明

序文この記事では主にMySQLのメモリ使用量に関する関連コンテンツを紹介し、皆さんの参考と学習のため...

Nginx プロキシを使用してフロントエンドのクロスドメイン問題を解決する方法

序文Nginx (「エンジン エックス」と発音) は、リバース プロキシ、ロード バランサ、HTTP...

Linux で最も頻繁に使用されるターミナル コマンドのトップ 10 のリストを取得します。

私が最も頻繁に使用するコマンドは次の通りです:選択肢CDギットls ssh須藤数週間前、私はこの R...

HTML テーブルタグチュートリアル (32): セルの水平方向の配置属性 ALIGN

水平方向では、セルの配置を左、中央、右に設定できます。基本的な構文<TD ALIGN=&quo...

MYSQLストアドプロシージャコメントの詳細な説明

目次1. 使用方法2. 準備3. 文法3.1 変数と代入3.2 入力および出力パラメータ3.3 プロ...

コンテナDockerCommitを介してイメージを送信し、DockerPushでイメージをプッシュします。

ローカルでコンテナを作成した後、このコンテナに基づいてローカル イメージを作成し、このイメージを D...

MySQL からエクスポートされた scv ファイル内の文字化けやジャンプ行の問題をすばやく解決します

仕事上の理由により、完全なオンライン化(​​つまり、すべてのデータがオンラインで完了し、インポートや...

CentOS6.5にpython3.7をインストールする詳細な手順

1. Python 3をダウンロードする https://www.python.org/ftp/py...

ページ内にマーキーとフラッシュが共存する場合の競合解決

競合の主な症状は、FLASH ボタンがジャンプし続け、不安定になり、Web ページの外観と通常のアク...

NginxはIP経由の直接アクセスを禁止し、カスタム500ページにリダイレクトします

設定ファイルに直接 サーバー{ listen 80 default; # IPへの直接アクセスを禁止...