挿入操作をログするトリガーの作成
このステップでは、MySQL で挿入操作を別のテーブルにログするトリガーを作成する方法を学びます。トリガーは、INSERT
、UPDATE
、または DELETE
などのテーブル上の特定のイベントに応じて自動的に実行される特別なストアドプログラムです。これは、変更の監査、ビジネスルールの適用、またはデータの変更に基づく他のアクションの実行に役立ちます。
まず、MySQL サーバーに接続しましょう。ターミナルを開き、次のコマンドを実行します。
mysql -u root -p
root パスワードの入力を求められます。パスワードを入力し、Enter キーを押します。
次に、mydatabase
という名前のデータベースがまだ存在しない場合は作成します。
CREATE DATABASE IF NOT EXISTS mydatabase;
USE mydatabase;
では、products
という名前のテーブルを作成しましょう。
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10, 2) NOT NULL
);
挿入操作をログするためのテーブルも必要です。product_logs
という名前のテーブルを作成しましょう。
CREATE TABLE product_logs (
log_id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT,
product_name VARCHAR(255),
product_price DECIMAL(10, 2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
では、トリガーを作成しましょう。このトリガーは、products
テーブルへの各挿入操作の後に実行されます。トリガーは、挿入された製品の詳細を含むレコードを product_logs
テーブルに挿入します。
CREATE TRIGGER products_after_insert
AFTER INSERT ON products
FOR EACH ROW
BEGIN
INSERT INTO product_logs (product_id, product_name, product_price)
VALUES (NEW.id, NEW.name, NEW.price);
END;
トリガーの定義を分解してみましょう。
CREATE TRIGGER products_after_insert
: この文は、products_after_insert
という名前のトリガーを作成します。
AFTER INSERT ON products
: これは、トリガーが products
テーブルへの各挿入操作の後に実行されることを指定します。
FOR EACH ROW
: これは、トリガーが products
テーブルに挿入される各行に対して実行されることを示します。
BEGIN ... END
: このブロックには、トリガーがアクティブ化されたときに実行される SQL 文が含まれています。
NEW.id
、NEW.name
、NEW.price
: これらは、新しく挿入された行の id
、name
、および price
列の値を参照します。
では、トリガーをテストするために、products
テーブルにいくつかのデータを挿入しましょう。
INSERT INTO products (name, price) VALUES ('Laptop', 1200.00);
INSERT INTO products (name, price) VALUES ('Mouse', 25.00);
最後に、トリガーがログレコードを挿入したかどうかを確認するために、product_logs
テーブルを確認しましょう。
SELECT * FROM product_logs;
products
テーブルに対して行った 2 つの挿入操作に対応する 2 つのレコードが product_logs
テーブルに表示されるはずです。
+--------+------------+--------------+---------------+---------------------+
| log_id | product_id | product_name | product_price | created_at |
+--------+------------+--------------+---------------+---------------------+
| 1 | 1 | Laptop | 1200.00 | 2024-10-27 12:00:00 |
| 2 | 2 | Mouse | 25.00 | 2024-10-27 12:00:00 |
+--------+------------+--------------+---------------+---------------------+
2 rows in set (0.00 sec)