You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL触发器创建需求:采购/销售时自动更新tbl_stock库存

MySQL 库存自动更新触发器实现

前提说明

从提供的表结构来看,tbl_purchase 和 tbl_sale 缺少与 tbl_stock 关联的 goods_id 字段——没有这个字段的话,无法确定采购/销售的是哪个商品,也就无法精准更新对应商品的库存。以下触发器代码默认两张表已补充 goods_id 字段(如果实际表结构中已有该字段,可忽略此说明)。

1. 采购入库触发器(插入tbl_purchase时更新库存)

创建触发器,当向tbl_purchase插入采购记录时,自动将对应商品的库存数量加上采购数量:

DELIMITER //
CREATE TRIGGER trg_after_insert_purchase
AFTER INSERT ON tbl_purchase
FOR EACH ROW
BEGIN
    UPDATE tbl_stock
    SET quantity = quantity + NEW.qty
    WHERE goods_id = NEW.goods_id;
END //
DELIMITER ;

2. 销售出库触发器(插入tbl_sale时更新库存)

创建触发器,当向tbl_sale插入销售记录时,自动将对应商品的库存数量减去销售数量:

DELIMITER //
CREATE TRIGGER trg_after_insert_sale
AFTER INSERT ON tbl_sale
FOR EACH ROW
BEGIN
    UPDATE tbl_stock
    SET quantity = quantity - NEW.qty
    WHERE goods_id = NEW.goods_id;
END //
DELIMITER ;

可选优化:库存防负校验

若业务要求库存数量不能为负数,可在销售触发器中增加校验逻辑,阻止库存不足的销售操作:

DELIMITER //
CREATE TRIGGER trg_after_insert_sale
AFTER INSERT ON tbl_sale
FOR EACH ROW
BEGIN
    DECLARE current_stock INT;
    SELECT quantity INTO current_stock FROM tbl_stock WHERE goods_id = NEW.goods_id;
    IF current_stock >= NEW.qty THEN
        UPDATE tbl_stock
        SET quantity = quantity - NEW.qty
        WHERE goods_id = NEW.goods_id;
    ELSE
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '库存不足,无法完成销售';
    END IF;
END //
DELIMITER ;

内容的提问来源于stack exchange,提问作者user20783073

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:42:45