所以我有这三张桌子。订单表是现有订单的列表,而订单详细信息由订单中的项目组成(因为 1 个订单可以有多个目录)。我正在使用 mysql
客户订单
订单编号 | 姓名 | 电子邮件 | 发货状态 |
---|---|---|---|
1 | 布莱恩 | [email protected] | 已发货 |
订单项
奇数 | 订单编号 | 目录_id | 数量 |
---|---|---|---|
1. | 1 | 1 | 5 |
2. | 1 | 2 | 5 |
存货
目录_id | 数量库存 |
---|---|
1 | 10 |
2 | 10 |
我想创建一个触发器,如果订单表中的 shipping_status 为“已发货”,那么它将更新库存中的库存。
我已经创建了这个触发器
create trigger update_inventory
after update on cust_order
for each row
begin
if new.shipping_status="Shipped" then
update inventory
set inStock = inStock - (select quantity from order_item where order_id=new.order_id)
where catalog_id in (select catalog_id from order_item where order_id=new.order_id);
end if;
end;
//
但它不起作用并转为 #1242 - 子查询返回超过 1 行
如何创建一次更新多行的触发器?
触发器的功能相当有限。
相反,编写一个存储过程来封装您需要“原子地”执行的一组操作。并确保将它们放入“交易”中。
查询需要
order_item (order_id, catalog_id)
在表结构中定义为 UNIQUE。如果没有,那么您必须使用聚合子查询而不是JOIN order_item
.