亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

ホームページ データベース mysql チュートリアル MySQL トリガーの例を示した説明: データベース アクションの自動化

MySQL トリガーの例を示した説明: データベース アクションの自動化

Dec 20, 2024 pm 04:15 PM

MySQL Triggers Explained with Examples: Automating Database Actions

MySQL トリガーの例を示した説明: データベース アクションの自動化

MySQL トリガー は、テーブル上の特定のイベント (INSERT、UPDATE など) に応答してデータベース內(nèi)で指定されたアクションを自動的に実行できる強力な機能です。 、または 削除。トリガーは、アプリケーション コードでこれらのアクションを明示的に管理する必要がなく、ビジネス ルールの適用、データの整合性の維持、または変更のログ記録に役立ちます。

このガイドでは、トリガーとは何か、どのように機能するのかを説明し、MySQL でのトリガーの使用法を理解するのに役立つ実踐的な例を提供します。


MySQL トリガーとは何ですか?

トリガーは、テーブルで特定のイベントが発生したときに MySQL によって自動的に実行される (または「トリガー」される) SQL ステートメントのセットです。イベントは次のいずれかになります:

  • INSERT: 挿入操作の後にトリガーされます。
  • UPDATE: 更新操作の後にトリガーされます。
  • DELETE: 削除操作の後にトリガーされます。

トリガーはイベントの BEFORE または AFTER のいずれかで実行されるように定義できるため、データの処理方法を柔軟に行うことができます。

トリガーを作成するための構(gòu)文

MySQL でトリガーを作成するための一般的な構(gòu)文は次のとおりです。

CREATE TRIGGER trigger_name
    trigger_time trigger_event
    ON table_name
    FOR EACH ROW
    trigger_body;
  • trigger_name: トリガーの名前。
  • trigger_time: イベントの前後にすることができます。
  • trigger_event: INSERT、UPDATE、または DELETE を指定できます。
  • table_name: トリガーが関連付けられているテーブルの名前。
  • trigger_body: トリガーが起動されたときに実行される SQL ステートメント。

トリガータイミング: BEFORE vs. AFTER

  • BEFORE Trigger: トリガー アクションは、トリガー イベントの前 (挿入、更新、または削除操作の前など) に実行されます。これにより、テーブルにコミットされる前にデータを変更できます。

  • AFTER Trigger: トリガー アクションはイベント後 (レコードの挿入、更新、削除後など) に実行されます。これは、ログ記録など、データに加えられた変更に基づいてアクションを?qū)g行する場合に便利です。


MySQL トリガーの例

1. トリガーの挿入例: デフォルト値を自動的に設定する

created_at 列を含む従業(yè)員情報を含むemployeesというテーブルがあるとします。 AFTER INSERT トリガーを作成して、新しいレコードが挿入されたときに created_at フィールドを現(xiàn)在のタイムスタンプに自動的に設定できます。

CREATE TRIGGER trigger_name
    trigger_time trigger_event
    ON table_name
    FOR EACH ROW
    trigger_body;

この例では:

  • トリガーは、employees テーブルに対して AFTER INSERT で実行されます。
  • NEW キーワードは、新しく挿入された行を參照するために使用されます。 NEW.id は、新しく挿入された行の ID を表します。
  • トリガーは、新しく挿入されたレコードの created_at 列を現(xiàn)在のタイムスタンプに更新します。

2. 更新トリガーの例: 更新値を自動計算する

価格と割引の列を持つテーブル products を想像してください。価格が更新されるたびに、discount_price フィールドを自動的に更新したいとします。


CREATE TRIGGER set_created_at
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
    UPDATE employees SET created_at = NOW() WHERE id = NEW.id;
END;
この例では:

    トリガーは、products テーブルに対して
  • AFTER UPDATE で実行されます。
  • NEW.price は更新された価格を指し、OLD.price は以前の値を指します。
  • 価格が変更された場合 (NEW.price <> OLD.price)、トリガーは新しい価格と割引に基づいてdiscount_priceを更新します。
3.

削除トリガーの例: 重要なデータの削除の防止

トリガーを使用して、特定の行の削除を防ぐなどのビジネス ルールを適用できます。たとえば、従業(yè)員テーブルで、重要としてフラグが付けられた従業(yè)員の削除を防止したい場合があります。


CREATE TRIGGER update_discounted_price
AFTER UPDATE ON products
FOR EACH ROW
BEGIN
    IF NEW.price <> OLD.price THEN
        UPDATE products SET discounted_price = NEW.price * (1 - NEW.discount / 100) WHERE id = NEW.id;
    END IF;
END;
この例では:

    トリガーは、employees テーブルの
  • BEFORE DELETE で実行されます。
  • OLD キーワードは、削除される前の行のデータを參照します。
  • is_critical 列が 1 に設定されている場合、トリガーは SIGNAL ステートメントを使用してエラーを発生させ、削除を防ぎます。
4.

トリガーの挿入例: 監(jiān)査ログの作成

トリガーは、テーブルへの挿入の監(jiān)査ログを維持するなど、ログの目的に使用できます。以下は、employees テーブルに追加されたすべての新しい従業(yè)員を Audit_log テーブルに記録する例です。


CREATE TRIGGER prevent_delete_critical_employee
BEFORE DELETE ON employees
FOR EACH ROW
BEGIN
    IF OLD.is_critical = 1 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete critical employee';
    END IF;
END;
この例では:

  • トリガーは、employees テーブルに対して AFTER INSERT で実行されます。
  • トリガーは、audit_log テーブルにレコードを挿入し、アクション (INSERT)、テーブル名 (employees)、挿入された従業(yè)員の ID (NEW.id)、およびタイムスタンプ (NOW()) を記録します。

トリガーの管理

  • トリガーの表示: information_schema.triggers テーブルをクエリすることで、データベース內(nèi)の既存のトリガーを表示できます。
CREATE TRIGGER trigger_name
    trigger_time trigger_event
    ON table_name
    FOR EACH ROW
    trigger_body;
  • トリガーを削除: トリガーが不要になった場合は、DROP TRIGGER ステートメントを使用して削除できます。
CREATE TRIGGER set_created_at
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
    UPDATE employees SET created_at = NOW() WHERE id = NEW.id;
END;

トリガーを使用する場合の考慮事項

  1. パフォーマンスへの影響: トリガーは追加の SQL ステートメントを?qū)g行するため、データベース操作にオーバーヘッドが追加されます。特に大規(guī)模なテーブルや頻繁な操作の場合、トリガー ロジックがどれほど複雑であるかに注意してください。

  2. トリガーのネスト: 同じテーブルを変更するトリガーには注意してください。無限ループや過度のリソース使用につながる可能性があります。 MySQL では、トリガーがそれ自體を直接呼び出すこと (再帰トリガー) を許可していません。

  3. データ整合性: トリガーは、不要な削除の防止など、データの整合性を確保するのに役立ちますが、デバッグが難しい場合があります。トリガー ロジックが適切に文書化されていることを常に確認してください。

  4. トリガーのテスト: トリガーを運用環(huán)境にデプロイする前に、常に開発環(huán)境またはステージング環(huán)境で徹底的にテストしてください。意図しない副作用がアプリケーションのパフォーマンスやビジネス ロジックに影響を與える可能性があります。

結(jié)論

MySQL トリガーは、挿入、更新、削除など、データベースの変更に応じたアクションを自動化する強力な機能です。トリガーを使用すると、ビジネス ルールを適用し、データの整合性を維持し、監(jiān)査やログなどのタスクを自動化できます。ただし、システムのパフォーマンスへの悪影響を避けるために、パフォーマンスへの影響を慎重に検討し、トリガーが慎重に実裝されていることを確認することが重要です。


以上がMySQL トリガーの例を示した説明: データベース アクションの自動化の詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中國語版

SublimeText3 中國語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

MySQLサーバーへの安全なリモート接続を確立します MySQLサーバーへの安全なリモート接続を確立します Jul 04, 2025 am 01:44 AM

tosecurelyconnecttoaremotemysqlserver、usesshtunneling、configuremysqlforremoteacess、setfirewallrules、andconsidersslencryption .first、Encistishansshtunnelwithssh-l3307:localhost:3306user@remote-server-nandconnectviamysql-h127.0.0.1-p3307.second、editmys

MySQLデータの整合性における外國の鍵の役割を理解する MySQLデータの整合性における外國の鍵の役割を理解する Jul 03, 2025 am 02:34 AM

foreignkeysinmysqlensuredategritybyenforcingrelationshipsbetweentables.thepreventorphanedrecords、restrictinvaliddataentry、andcancascadechangesautomativitive.mustusetheetheintein nodbstorageine、およびforeidmatekolumnsmatchedtatepeofeofeofefe

mysqlでmysqldumpを使用して論理バックアップを?qū)g行します mysqlでmysqldumpを使用して論理バックアップを?qū)g行します Jul 06, 2025 am 02:55 AM

MySQLDUMPは、MySQLデータベースの論理バックアップを?qū)g行するための一般的なツールです。データベースを再構(gòu)築するための作成および挿入ステートメントを含むSQLファイルを生成します。 1.元のファイルをバックアップするのではなく、データベースの構(gòu)造とコンテンツをポータブルSQLコマンドに変換します。 2。小さなデータベースや選択的回復に適しており、TBレベルのデータの迅速な回復には適していません。 3.一般的なオプションには、-single-Transaction、 - database、 - all-database、 - routinesなどが含まれます。 4. MySQLコマンドを使用して回復中にインポートし、外部キーチェックをオフにして速度を向上させることができます。 5.バックアップを定期的にテストし、圧縮と自動調(diào)整を使用することをお勧めします。

MySQLスロークエリログを分析して、パフォーマンスボトルネックを見つける MySQLスロークエリログを分析して、パフォーマンスボトルネックを見つける Jul 04, 2025 am 02:46 AM

MySQLスロークエリログをオンにし、位置づけ可能なパフォーマンスの問題を分析します。 1.構(gòu)成ファイルを編集するか、動的にSLOW_QUERY_LOGおよびLONG_QUERY_TIMEを設定します。 2。ログには、query_time、lock_time、rows_examinedなどの重要なフィールドが含まれており、効率のボトルネックの判斷を支援します。 3. mysqldumpslowまたはpt-query-digestツールを使用して、ログを効率的に分析します。 4.最適化の提案には、インデックスの追加、Select*の回避、複雑なクエリの分割などが含まれます。たとえば、user_idにインデックスを追加すると、スキャンされた行の數(shù)を大幅に削減し、クエリ効率を改善できます。

mysql列とクエリのnull値を処理します mysql列とクエリのnull値を処理します Jul 05, 2025 am 02:46 AM

mysqlでnull値を処理する場合、次の手に注意してください。1。テーブルを設計する場合、キーフィールドはnotnullに設定され、オプションのフィールドはnullを許可されます。 2。ISNULLまたはISNOTNULLは、=または!=;で使用する必要があります。 3. IFNULLまたはCoalesce関數(shù)を使用して、表示のデフォルト値を置き換えることができます。 4.挿入または更新時にnull値を直接使用する場合は注意し、データソースとORMフレームワークの処理方法に注意を払ってください。 nullは未知の値を表し、それ自體を含む値と等しくありません。したがって、テーブルをクエリ、カウント、および接続するときは、データや論理エラーの欠落を避けるときは注意してください。関數(shù)と制約の合理的な使用は、ヌルによる干渉を効果的に減らすことができます。

mysqlサーバーのルートパスワードをリセットします mysqlサーバーのルートパスワードをリセットします Jul 03, 2025 am 02:32 AM

MySQLのルートパスワードをリセットするには、次の手順に従ってください。1。mysqlサーバーを停止し、sudosystemctlstopmysqlまたはsudosystemctlstopmysqldを使用してください。 2。-skip-grant-tablesモードでmysqlを起動し、sudomysqld-skip-grant-tablesを?qū)g行します&; 3. mysqlにログインし、対応するsqlコマンドを?qū)g行して、flushprivilegesなどのバージョンに従ってパスワードを変更します。

MySQLのデータベースとテーブルサイズの計算 MySQLのデータベースとテーブルサイズの計算 Jul 06, 2025 am 02:41 AM

MySQLデータベースとテーブルのサイズを表示するには、Information_schemaを直接照會するか、コマンドラインツールを使用できます。 1.データベースサイズ全體を確認します。SQLステートメントSelectTable_schemaas'Database '、sum(data_length index_length)/1024/1024as'size(mb)' frominformation_schema.tablesgroupbytable_schema;すべてのデータベースの合計サイズを取得するか、特定のデータベースを制限する條件を追加することができます。 2。単一のテーブルサイズを確認します:SelectTaを使用します

MySQLの文字セットと照合の問題を処理します MySQLの文字セットと照合の問題を処理します Jul 08, 2025 am 02:51 AM

クロスプラットフォームの移行またはマルチパーソン開発の場合、文字セットとソートルールの問題は一般的になり、その結(jié)果、文字化けされたコードまたは一貫性のないクエリが発生します。 3つのコアソリューションがあります。最初に、データベース、テーブル、およびフィールドの文字セットをUTF8MB4にチェックして統(tǒng)合し、showCreateDatabase/テーブルを介して表示し、ALTERステートメントで変更します。次に、クライアントが接続するときにUTF8MB4文字セットを指定し、接続パラメーターに設定するか、SetNamesを?qū)g行します。第三に、ソートルールを合理的に選択し、UTF8MB4_UNICODE_CIを使用して比較と並べ替えの正確性を確保し、ライブラリとテーブルを構(gòu)築するときに変更を介して指定または変更することをお勧めします。

See all articles