-- 创建 product 表(存产品信息)
CREATE TABLE product (
id INT(10) PRIMARY KEY, -- 产品编号,“主键” 就是这列值不能重复,用来唯一找某个产品
name VARCHAR(20) NOT NULL, -- 产品功能,“非空” 就是必须填,不能空着
func VARCHAR(50), -- 主要功能,允许空着不填
com VARCHAR(20) NOT NULL, -- 生产厂家,必须填
address VARCHAR(20) -- 地址信息
-- 创建 operate 表(存操作记录)
CREATE TABLE operate (
op_id INT(10) PRIMARY KEY AUTO_INCREMENT, -- 操作记录的编号,“自增” 就是每次插入自动 +1,不用自己填
op_type VARCHAR(20), -- 存操作类型
op_time VARCHAR(20) NOT NULL, -- 操作时间,必须填
product_id INT(10), -- 关联 product 表的 id,记录 “这次操作的是哪个产品”
FOREIGN KEY (product_id) REFERENCES product(id) -- 约束:product_id 必须是 product 表里存在的 id );
DELIMITER // -- 临时改结束符(因为触发器里有分号,避免 MySQL 提前结束)
CREATE TRIGGER product_after_insert_trigger
AFTER INSERT ON product -- 触发条件:往 product 表新增一行数据后
FOR EACH ROW -- 每新增一行,就执行一次
BEGIN -- 往 operate 表插一条记录:操作类型是 insert,时间是现在,关联的产品 id 是刚新增的
INSERT INTO operate (op_type, op_time, product_id) VALUES ('insert', NOW(), NEW.id); --
NEW.id 就是刚新增那行的产品编号
END // DELIMITER ; -- 改回默认结束符
改了 product 里的任何内容(比如改了产品名称、厂家),触发器就自动在 operate 里记一条:操作类型 update、时间是现在、对应产品编号是修改后的(如果没改编号,就和原来一样)。
DELIMITER //
CREATE TRIGGER product_after_delete_trigger
AFTER DELETE ON product -- 触发条件:从 product 表删除一行数据后
FOR EACH ROW
BEGIN
INSERT INTO operate (op_type, op_time, product_id)
VALUES ('delete', NOW(), OLD.id); -- OLD.id 是删除前那行的产品编号
END //
DELIMITER ; (标准)
删了 product 里的某个产品(比如删了 “手机” 这条数据),触发器就自动在 operate 里记一条:操作类型 delete、时间是现在、对应产品编号是刚删的那个(删完就没了,所以用 OLD.id 拿删除前的编号)。