如何在新增Table B采购记录时同步更新Table A库存数据?
自动同步库存与采购记录的实现方案
假设表结构
- Table A(库存商品记录表):包含
item_id(商品唯一标识,主键)、item_quantity(当前库存数量)字段 - Table B(采购记录表):包含
purchase_id(采购单唯一标识,主键)、item_id(关联商品ID)、item_quantity(采购数量)字段
核心实现:数据库触发器
通过数据库的AFTER INSERT触发器,在采购记录插入Table B后,自动更新Table A的对应库存。以下是主流数据库的具体实现:
1. MySQL 版本
创建触发器,插入采购记录后自动扣减库存:
DELIMITER // CREATE TRIGGER update_stock_after_purchase AFTER INSERT ON Table B FOR EACH ROW BEGIN UPDATE Table A SET item_quantity = item_quantity - NEW.item_quantity WHERE item_id = NEW.item_id; END // DELIMITER ;
NEW.item_id/NEW.item_quantity:指代刚插入的采购记录中的商品ID和采购数量- 触发器会自动匹配Table A中对应商品,完成库存扣减
2. PostgreSQL 版本
PostgreSQL需要先定义触发函数,再绑定触发器:
第一步:创建触发函数
CREATE OR REPLACE FUNCTION update_stock() RETURNS TRIGGER AS $$ BEGIN UPDATE Table A SET item_quantity = item_quantity - NEW.item_quantity WHERE item_id = NEW.item_id; RETURN NEW; END; $$ LANGUAGE plpgsql;
第二步:绑定触发器
CREATE TRIGGER update_stock_after_purchase AFTER INSERT ON Table B FOR EACH ROW EXECUTE FUNCTION update_stock();
关键注意事项
- 给Table B的
item_id添加外键约束,关联Table A的item_id,避免插入不存在的商品ID导致无效更新 - 若需支持采购记录修改/取消(比如调整采购数量、删除采购单),可额外创建
AFTER UPDATE/AFTER DELETE触发器,反向调整库存(比如更新时用NEW.item_quantity - OLD.item_quantity计算差值,删除时加回库存) - 高并发场景下,建议在库存更新语句中添加行级锁(如MySQL的
UPDATE ... WHERE ... FOR UPDATE),防止出现库存超卖的并发问题
内容的提问来源于stack exchange,提问作者wingck
相关产品推荐
相关产品推荐

