MySQL 触发器实战:产品管理系统操作记录跟踪
MySQL 触发器实战:产品管理系统操作记录跟踪
本文以产品管理系统为例,演示如何使用 MySQL 触发器跟踪产品表操作记录。通过创建 BEFORE INSERT、AFTER UPDATE 和 AFTER DELETE 触发器,自动记录产品新增、修改和删除操作。
数据库表结构
- Product 表
| 字段名 | 字段描述 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 | |---|---|---|---|---|---|---|---| | Id | 产品编号 | Int(10) | 是 | 否 | 是 | 是 | 否 | | Name | 产品名称 | Varchar(20) | 否 | 否 | 是 | 否 | 否 | | Function | 主要功能 | Varchar(50) | 否 | 否 | 否 | 否 | 否 | | Company | 生产厂家 | Varchar(20) | 否 | 否 | 是 | 否 | 否 | | Address | 住址 | Varchar(20) | 否 | 否 | 否 | 否 | 否 |
- Operate 表
| 字段名 | 字段描述 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 | |---|---|---|---|---|---|---|---| | Op_id | 产品编号 | Int(10) | 否 | 否 | 是 | 否 | 否 | | Op_type | 操作方式 | Varchar(20) | 否 | 否 | 是 | 否 | 否 | | Op_time | 操作时间 | Time | 否 | 否 | 是 | 否 | 否 |
实现步骤
- 创建 product 表和 operate 表
CREATE TABLE Product (
Id INT(10) PRIMARY KEY,
Name VARCHAR(20) NOT NULL UNIQUE,
Function VARCHAR(50),
Company VARCHAR(20) NOT NULL,
Address VARCHAR(20)
);
CREATE TABLE Operate (
Op_id INT(10),
Op_type VARCHAR(20) NOT NULL,
Op_time TIME NOT NULL,
FOREIGN KEY (Op_id) REFERENCES Product(Id)
);
- 创建 product_bf_insert 触发器
CREATE TRIGGER product_bf_insert
BEFORE INSERT ON Product
FOR EACH ROW
BEGIN
INSERT INTO Operate (Op_id, Op_type, Op_time) VALUES (NEW.Id, 'INSERT', NOW());
END;
- 创建 product_af_update 触发器
CREATE TRIGGER product_af_update
AFTER UPDATE ON Product
FOR EACH ROW
BEGIN
INSERT INTO Operate (Op_id, Op_type, Op_time) VALUES (NEW.Id, 'UPDATE', NOW());
END;
- 创建 product_af_del 触发器
CREATE TRIGGER product_af_del
AFTER DELETE ON Product
FOR EACH ROW
BEGIN
INSERT INTO Operate (Op_id, Op_type, Op_time) VALUES (OLD.Id, 'DELETE', NOW());
END;
- 对 product 表进行操作
-- 插入产品
INSERT INTO Product (Id, Name, Function, Company, Address)
VALUES (1, 'Product A', 'Function A', 'Company A', 'Address A');
-- 更新产品
UPDATE Product
SET Name = 'Product A Updated'
WHERE Id = 1;
-- 删除产品
DELETE FROM Product WHERE Id = 1;
**注意:**触发器会在执行相应的操作语句时自动触发,不需要手动执行触发器。
总结
本文演示了如何使用 MySQL 触发器自动记录产品操作,方便进行审计、跟踪和数据恢复。通过这种方式,可以更好地管理产品数据,提高系统安全性。
延伸阅读
- MySQL 触发器官方文档: https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html
- MySQL 触发器应用场景: https://www.mysqltutorial.org/mysql-triggers/
原文地址: https://www.cveoy.top/t/topic/qFBO 著作权归作者所有。请勿转载和采集!