Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ トリガー | セクション
SQL最適化とクエリ機能

bookトリガー

メニューを表示するにはスワイプしてください

トリガーは、テーブルに対する挿入、更新、削除などの特定のイベントに応じて、自動的に一連の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;
copy

このトリガーがどのように動作し、テーブルにどのような影響を与えるかを解説。log_salary_change関数はトリガー関数として定義されており、呼び出されるたびにsalary_changesテーブルへ新しい行を挿入し、従業員ID、変更前の給与、変更後の給与、変更日を記録する。AFTER UPDATE OF salary ON employeesは、salaryテーブルのemployees列が更新された後のみトリガーが発動することを意味する。WHEN句により、実際に給与が変更された場合のみトリガーが実行される。

employeesテーブルで従業員の給与を更新すると、トリガーによって自動的にsalary_changesへ関連情報が記録される。これにより、給与調整の監査証跡が確実に残り、手動で変更履歴を記録する必要がなくなる。このようなトリガーは、ビジネスロジックの自動化や関連テーブル間のデータ整合性維持に有効な手段。

1. トリガーの目的は何ですか?

2. AFTERトリガーはどのような場合に使用しますか?

3. トリガーは他のテーブルのデータを変更できますか?

question mark

トリガーの目的は何ですか?

正しい答えを選んでください

question mark

AFTERトリガーはどのような場合に使用しますか?

正しい答えを選んでください

question mark

トリガーは他のテーブルのデータを変更できますか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  15

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  15
some-alt