创建触发器以记录插入操作
在这一步中,你将学习如何在 MySQL 中创建一个触发器,该触发器会将插入操作记录到一个单独的表中。触发器是特殊的存储程序,会针对表上的某些事件(如 INSERT
、UPDATE
或 DELETE
)自动执行。这对于审计更改、实施业务规则或基于数据修改执行其他操作非常有用。
首先,让我们连接到 MySQL 服务器。打开一个终端并执行以下命令:
mysql -u root -p
系统会提示你输入 root 密码。输入密码后按回车键。
接下来,如果 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;
你应该会在 product_logs
表中看到两条记录,对应我们在 products
表上执行的两次插入操作。
+--------+------------+--------------+---------------+---------------------+
| 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)