トリガー
メニューを表示するにはスワイプしてください
トリガーは、テーブルに対する挿入、更新、削除などの特定のイベントに応じて、自動的に一連のSQL文を実行する特別なデータベースオブジェクト。トリガーを利用することで、データが変更されるたびに実行する必要がある処理を自動化でき、ビジネスルールの強制や監査証跡の維持を手動操作なしで実現可能。
トリガーには主に2種類が存在し、BEFOREトリガーとAFTERトリガーがある。BEFOREトリガーはイベント発生前に実行され、データがテーブルに書き込まれる前に検証や修正を行うことができる。AFTERトリガーはイベント発生後に実行され、データが既に変更・コミットされた後の処理(変更履歴の記録や関連テーブルの更新など)に適している。
例えば、給与情報を格納するemployeesテーブルと、従業員の給与変更履歴を記録するsalary_changesテーブルがある場合、employeesテーブルにAFTER UPDATEトリガーを設定することで、従業員の給与が変更されるたびに自動的にsalary_changesへレコードを挿入できる。この方法により、すべての給与変更がアプリケーションコードやユーザー操作に依存せず、一貫して確実に記録される。
123456789101112131415161718192021222324-- Drop the trigger and function if they exist to clean up before creating new ones DROP TRIGGER IF EXISTS after_salary_update ON employees; DROP FUNCTION IF EXISTS log_salary_change(); CREATE OR REPLACE FUNCTION log_salary_change() RETURNS TRIGGER AS $$ BEGIN INSERT INTO salary_changes (employee_id, old_salary, new_salary, change_date) VALUES (NEW.employee_id, OLD.salary, NEW.salary, CURRENT_DATE); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER after_salary_update AFTER UPDATE OF salary ON employees FOR EACH ROW WHEN (OLD.salary IS DISTINCT FROM NEW.salary) EXECUTE FUNCTION log_salary_change(); -- Example update to trigger the salary change logging UPDATE employees SET salary = salary + 1000 WHERE employee_id = 1; -- View the logged salary changes SELECT * FROM salary_changes WHERE employee_id = 1;
このトリガーがどのように動作し、テーブルにどのような影響を与えるかを解説。log_salary_change関数はトリガー関数として定義されており、呼び出されるたびにsalary_changesテーブルへ新しい行を挿入し、従業員ID、変更前の給与、変更後の給与、変更日を記録する。AFTER UPDATE OF salary ON employeesは、salaryテーブルのemployees列が更新された後のみトリガーが発動することを意味する。WHEN句により、実際に給与が変更された場合のみトリガーが実行される。
employeesテーブルで従業員の給与を更新すると、トリガーによって自動的にsalary_changesへ関連情報が記録される。これにより、給与調整の監査証跡が確実に残り、手動で変更履歴を記録する必要がなくなる。このようなトリガーは、ビジネスロジックの自動化や関連テーブル間のデータ整合性維持に有効な手段。
1. トリガーの目的は何ですか?
2. AFTERトリガーはどのような場合に使用しますか?
3. トリガーは他のテーブルのデータを変更できますか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください