トリガーにより、ステートメントの実行前または実行後に他の SQL コードを実行できます。トリガーは、トリガー ステートメントによって変更されたデータを読み取ることができますが、戻り値はありません。したがって、トリガーを使用すると、アプリケーション内に対応するコードを記述せずに、ビジネス ロジックの制約を適用できます。 上記の説明から、トリガーを使用するとアプリケーションのロジックが簡素化され、パフォーマンスが向上することがわかります。これは、トリガーを使用すると、アプリケーションとサーバー間のやり取りの回数が減るためです。また、トリガーは正規化と統計を自動的に更新するのに役立ちます。たとえば、トリガーを使用して、合計取引金額、注文数、平均注文値を自動的にカウントできます。 ただし、MySQL トリガーの適用シナリオも非常に限られています。他のデータベース製品のトリガーを使用したことがある場合は、MySQL でも同じ機能を実現できるとは想定しないでください。例:
CREATE TRIGGER トリガー名 BEFORE | AFTER トリガーイベント ON テーブル名 FOR EACH ROW 始める ステートメントリストを実行します。 終わり 実行ステートメント リストは、単一または複数のステートメントをサポートします。次に、複数のステートメントの例を示します。 区切り文字 $$ 各行に対して t_users に INSERT した後に、トリガー user_create_log を作成します。 始める log_info VARCHAR(40) 文字セット utf8 を宣言します。 DECLARE description VARCHAR(20) character set utf8;#後に中国語の文字エンコードが文字化けしていることが判明したので、ここで文字セットを設定しました SET description = " が作成されます"; SET log_info = CONCAT(NEW.user_name, description); #CONCAT 関数は文字列を連結できます INSERT INTO logs(log) values(log_info); 終了 $$ 区切り文字 ;
最も大きな制限は FOR EACH ROW の設計です。これにより、トリガーを使用して統計やキャッシュ テーブルを維持できなくなることがあります。これは、処理が遅くなる可能性があるためです。トリガーを使用する主な理由は、スケジュールされた同期更新と比較して、データの一貫性を一貫して維持できることです。 トリガーもアトミック性を保証することはできません。たとえば、MyISAM テーブルを更新するトリガーは、ソース SQL ステートメントでエラーが発生した場合はロールバックできません。さらに、トリガー自体に欠陥がある可能性もあります。 MyISAM データ テーブルに基づいて AFTER UPDATE を使用して別のテーブルを更新する場合。トリガーにエラーがあり、2 番目のテーブルでの操作が失敗した場合、最初のテーブルでの操作はロールバックされません。 ソース ステートメントを含む InnoDB トリガー関連の操作はすべて同じトランザクション内にあるため、アトミック性要件を満たしています。ただし、InnoDB トリガーを使用して別のテーブルとのデータの一貫性を検証する場合、注意しないと誤った結果が生じる可能性があります。たとえば、トリガーを使用して外部キーをシミュレートする必要がある場合は、BEFORE INSERT トリガーを使用して、対応するレコードが別のテーブルに存在するかどうかを確認できます。ただし、トリガーが別のテーブルからデータを読み取るときに SELECT FOR UPDATE を使用しないと、同時実行の問題により誤った結果が発生する可能性があります。 トリガーにはいくつか欠陥がありますが、使用できないわけではありません。逆に、トリガーは、特に制約、システム メンテナンス タスク、統計を最新の状態に保つ場合など、それ自体でも役立ちます。 トリガーを使用してデータ行の変更を記録することもできます。この方法では、オフラインでの手動データベース操作(誤ったデータの修復など)の記録も記録できます。ただし、他の自動インクリメント主キー テーブルにデータを挿入する場合は注意が必要です。2 つの同一のレプリカの自動インクリメント値が異なるため、複製されたステートメントで問題が発生する可能性があります。 結論: トリガーは、統計データ、データ テーブルの変更ログなどの限られた状況でその利点を発揮できます。ただし、いくつかの欠点もあります。たとえば、大量のデータを更新すると、行ごとにトリガーされるため、効率が低下します。また、MyISAM エンジンはアトミック性を保証できません。したがって、トリガーがあるかどうかは、アプリケーション シナリオによって異なります。 以上がMySQLトリガーの使用に関する詳細な内容です。MySQLトリガーの詳細については、123WORDPRESS.COMの他の関連記事にも注目してください。 以下もご興味があるかもしれません:
|
>>: Tomcat ソースコード起動コンソールの中国語文字化けのデバッグプロセス記録
目次Webコンポーネントカスタム要素概要HTMLTemplateElement コンテンツ テンプレ...
目次1. JavaScript オブジェクト1).配列オブジェクト2).ブールオブジェクト3).日付...
多くの友人がフォーラムやメッセージエリアで、どのような状況で MySQL をシャーディングする必要が...
目次序文フラグメントの動機React Fragment の紹介と使用<React.Fragme...
目次Docker入門Docker環境のインストールDockerイメージの共通コマンド検索ミラー画像を...
1. エラーの詳細一度、データベース全体のバックアップを手動で実行したときに、次のエラーが発生しまし...
最近、ポップアップ広告に取り組んでいました。デフォルト ページには z-index が設定されていな...
目次1. 遅いクエリ構成1-1. スロークエリを有効にする2. 遅いクエリSQLの分析を説明する3....
導入振り返ってみると、4年前、私がMySQLのインデックスについて学んでいたとき、先生はインデックス...
1. コマンドの紹介chkconfig コマンドは、システム サービスの実行レベル情報を更新および照...
テーブル ヘッダーの背景画像を設定します。任意の GIF または JPEG 画像ファイルを使用できま...
皆さんの時間は貴重だと承知しているので、プロセス コマンドを直接書き留めておきます。設定できます。原...
HTML フォームは、名前、電子メール アドレス、場所、年齢などのユーザー情報を収集するためによく使...
目次序文1. 文字列を分割する2. JSONのフォーマットと解析3. 複数行の文字列と埋め込み式4....
この記事の例では、どこにでも移動できるフローティングボタンを実現するためのVueの具体的なコードを共...