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
相关产品推荐
相关产品推荐

