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カスタムツリーコントロールの使い方の詳細な説明

推薦する

Tomcat の文字化けしたコードとポート占有の解決方法について簡単に説明します

Tomcat サーバーは、無料でオープン ソースの Web アプリケーション サーバーです。軽量のア...

TypeScript をインストール、使用、自動コンパイルする方法に関するチュートリアル

1. TypeScriptの紹介前回の記事ではTypeScriptのインストール、使い方、自動コンパ...

Dockerイメージをプルしてバージョンを確認する方法

イメージのバージョンとタグを確認するには、docker hubで確認する必要があります。アドレスは次...

Linux lnコマンドの使用

1. コマンドの紹介ln コマンドは、ファイルのリンクを作成するために使用されます。リンクは、ハード...

CocosCreatorを使ってシューティングゲームを作る方法

製造手順を分析します。 1. リソースを準備してシーンを構築するオンラインでリソースを探すか、私のリ...

Docker コンテナにデプロイされた Django のタイムゾーンの問題

目次Django でのタイムゾーン設定USE_TZ=真USE_TZ=偽Linux コンテナでのタイム...

html-webpack-plugin' を使用してメモリ内に HTML ページ プラグインを生成します。

webpackjs ファイルをパッケージ化するときに、次に示すように、index.html インタ...

Linuxはjoin -a1を使用して2つのファイルを結合します

次の2つのファイルを結合するには、それらを結合して1.txtに結合します。 # 1.txt ジェリー...

CSSの複数条件の書き方の詳細説明:

:not疑似クラスセレクターは、式に一致しない要素をフィルタリングできます。例 テーブル tbod...

nginxの基礎を学ぶ

目次1. nginx とは何ですか? 2. nginx で何ができるのか? 2.1 フォワードプロキ...

DockerのIDEA構成プロセス

IDEA は Java で最も一般的に使用されている開発ツールであり、Docker は最も人気のある...

CSS3 で translate と transition を使用する方法

translate と transition は非常に強力で、習得するのは不可能だといつも感じていま...

CocosCreator で物理エンジン ジョイントを使用する方法

目次マウスジョイント マウスジョイント距離ジョイント距離ジョイントモータージョイント直動ジョイント変...

Node はあいまい検索用の検索ボックスを実装します

この記事の例では、検索ボックスでファジークエリを実装するためのNodeの具体的なコードを参考までに共...

Nginx でバージョン番号を隠したり偽造したりする方法

1. デフォルトでアクセスするには、curl コマンドを使用します。 # curl -I http:...