MySQL - CREATE TRIGGER: 基礎者のガイド
こんにちは、データベース愛好家の皆さん!今日は、MySQLのトリガーの fascinēting な世界に飛び込みます。プログラミングが初めてであっても心配しないでください。この旅の中であなたの親切なガイドになるつもりです。このチュートリアルの最後に、プロのようにトリガーを作成できるようになるでしょう!
トリガーとは?
トリガーを作成する前に、まずそれが何かを理解しましょう。 imagine して、あなたの忠実な犬が、誰かがドアベルを押すたびに吠える情景を思い浮かべてください。データベースの世界では、トリガーはその犬のように、データベース内の特定のイベントに対する自動的な反応です。
定義
トリガーは、テーブルに関連付けられた名前付きのデータベースオブジェクトで、そのテーブルに対する特定のイベントが発生したときに自動的にアクティブ化されます。
MySQLでのトリガーの作成
トリガーが何かを理解したので、次にMySQLでそれらを作成する方法を学びましょう。新しい魔法の言葉を学ぶようなものですが、杖を振る代わりに、コマンドをタイプします!
基本構文
以下はCREATE TRIGGER文の基本構造です:
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
trigger_body;
これを分解しましょう:
-
trigger_name
:あなたがトリガーを呼ぶ名前です。それが何をしているかを説明する名前を選んでください。 -
{BEFORE | AFTER}
:トリガーがアクティブ化するタイミングを決定します – イベントの前か後か。 -
{INSERT | UPDATE | DELETE}
:トリガーをアクティブ化するイベントです。 -
table_name
:トリガーに関連付けられたテーブルです。 -
FOR EACH ROW
:イベントに関連する各行に対してトリガーがアクティブ化します。 -
trigger_body
:トリガーがアクティブ化したときに実行されるSQLステートメントです。
例1: BEFORE INSERT トリガー
すべての従業員の名前が大文字になるようにするトリガーを作成しましょう。
CREATE TRIGGER capitalize_name
BEFORE INSERT ON employees
FOR EACH ROW
SET NEW.name = UPPER(NEW.name);
この例では:
- トリガーの名前は
capitalize_name
です。 -
INSERT
操作の前にemployees
テーブル上でアクティブ化します。 - 各新しい行に対して、
name
列をUPPER()
関数を使って大文字にします。 -
NEW
は挿入される新しい行を指します。
例2: AFTER UPDATE トリガー
給料の変更を別のテーブルに記録するトリガーを作成しましょう。
CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary <> NEW.salary THEN
INSERT INTO salary_log (employee_id, old_salary, new_salary, change_date)
VALUES (NEW.id, OLD.salary, NEW.salary, NOW());
END IF;
END;
ここで起こっていることは:
- トリガーの名前は
log_salary_changes
です。 -
UPDATE
操作の後にemployees
テーブル上でアクティブ化します。 - 給料が変更された場合(
OLD.salary <> NEW.salary
)に、記録をsalary_log
テーブルに挿入します。 -
OLD
は更新前の行を指し、NEW
は更新後の行を指します。
クライアントプログラムを使用してトリガーを作成する
MySQLで直接トリガーを作成することもできますが、時々クライアントプログラムを使用する方が便利です。MySQLのコマンドラインクライアントを使ってどのようにするか見てみましょう。
ステップ1: MySQLに接続する
まず、ターミナルまたはコマンドプロンプトを開き、MySQLに接続します:
mysql -u username -p
username
をあなたのMySQLユーザー名に置き換えてください。パスワードの入力を求められます。
ステップ2: データベースを選択する
接続したら、操作したいデータベースを選択します:
USE your_database_name;
ステップ3: トリガーを作成する
今、トリガーを作成します。給料ログの例を使いましょう:
DELIMITER //
CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary <> NEW.salary THEN
INSERT INTO salary_log (employee_id, old_salary, new_salary, change_date)
VALUES (NEW.id, OLD.salary, NEW.salary, NOW());
END IF;
END //
DELIMITER ;
DELIMITER //
と DELIMITER ;
の使用に注意してください。トリガーの中にセミコロンが含まれているため、一時的にデリミタを変更する必要があります。
ステップ4: トリガーを確認する
トリガーが正常に作成されたか確認するために、以下を使用します:
SHOW TRIGGERS;
これにより、現在のデータベース内のすべてのトリガーが表示されます。
トリガーのメソッド
以下はMySQLで最も一般的なトリガーメソッドの表です:
メソッド | 説明 |
---|---|
BEFORE INSERT | 新しい行が挿入される前にアクティブ化 |
AFTER INSERT | 新しい行が挿入された後にアクティブ化 |
BEFORE UPDATE | 既存の行が更新される前にアクティブ化 |
AFTER UPDATE | 既存の行が更新された後にアクティブ化 |
BEFORE DELETE | 既存の行が削除される前にアクティブ化 |
AFTER DELETE | 既存の行が削除された後にアクティブ化 |
これらの各メソッドは、正しく使用されると非常に強力なツールになります。データベースのナイフのように、さまざまな用途に使えます!
結論
おめでとうございます!あなたは刚刚、MySQLのトリガーの世界への最初のステップを踏み出しました。トリガーとは何か、どのように作成するか、そしてクライアントプログラムを使ってどのように使用するかをカバーしました。強力なツールですが、無謀に使うと複雑さやパフォーマンスの問題を引き起こす可能性があります。
MySQLの旅を続ける中で、トリガーを練習し、実験を続けてください。間もなく、メルリンさえも嫉妬するようなデータベースの魔法を創り出すことができるでしょう!快適なコーディングを、あなたのクエリがいつも期待通りに結果を返すことを祈っています!
Credits: Image by storyset