库存管理数据库:Table B插入后触发更新Table A对应LotNum的Quantity
库存扣减触发器实现方案
前提表结构定义
假设使用MySQL数据库,先创建两张核心业务表:
-- 库存表(对应需求中的Table A) CREATE TABLE inventory ( LotNum VARCHAR(20) PRIMARY KEY, Quantity INT NOT NULL CHECK (Quantity >= 0) ); -- 扣减工单表(对应需求中的Table B) CREATE TABLE deduction_workorder ( id INT AUTO_INCREMENT PRIMARY KEY, LotNum VARCHAR(20) NOT NULL, Quantity INT NOT NULL CHECK (Quantity > 0), FOREIGN KEY (LotNum) REFERENCES inventory(LotNum) );
创建AFTER INSERT触发器
当向工单表插入扣减记录时,自动更新库存表对应批次的剩余数量:
DELIMITER // CREATE TRIGGER after_deduction_insert AFTER INSERT ON deduction_workorder FOR EACH ROW BEGIN UPDATE inventory SET Quantity = Quantity - NEW.Quantity WHERE LotNum = NEW.LotNum; END // DELIMITER ;
测试验证流程
- 初始库存数据(Table A)
| LotNum | Quantity |
|---|---|
| 1251 | 40 |
| 1125 | 30 |
- 插入扣减工单(Table B)
执行插入语句:
INSERT INTO deduction_workorder (LotNum, Quantity) VALUES ('1251', 20);
- 触发器执行后库存数据(Table A)
| LotNum | Quantity |
|---|---|
| 1251 | 20 |
| 1125 | 30 |
关键说明
- 触发器通过
NEW关键字获取刚插入的工单记录里的批次号和扣减数量 - 给库存表
Quantity字段加非负约束,可避免出现负库存情况 - 工单表添加外键约束,能防止插入不存在的批次号
内容的提问来源于stack exchange,提问作者Tyler W
相关产品推荐
相关产品推荐

