mysql - 如何在一个表中插入影响mysql中另一个表的值
问题描述
我有三张桌子:
Merchandise
(ID_MERCH char(20) PK,
ITEM_NAME varchar(225),
ID_ARTIST char(20),
STOCK int,
PRICE float
);
Merchandise_Sales
(ID_MERCH char(20),
ID_ARTIST char(20),
QUANTITY_SOLD int,
ID_DIST char(10)
);
Merch_Stock
(ID_MERCH char(20),
STOCK int,
TOTAL_SOLD decimal(32,0),
CURRENT_STOCK decimal(33,0)
);
商品是有关商品的信息,包括其价格和总库存。
Merchandise_Sales 就像不同分销商记录的订单记录。
Merchandise_Stock 我们用一个函数创建并加入,但现在意识到我们可能需要将该函数保存为一个过程。
Merch_Stock 的代码是:
CREATE TABLE MERCH_STOCK AS (
SELECT DISTINCT MS.ID_MERCH, M.STOCK, sum(QUANTITY_SOLD) AS TOTAL_SOLD, M.STOCK-(sum(QUANTITY_SOLD)) AS CURRENT_STOCK
FROM MERCHANDISE_SALES MS
INNER JOIN MERCHANDISE M ON M.ID_MERCH=MS.ID_MERCH
GROUP BY ID_MERCH
);
我想我需要做的是一个两(?)步骤程序?
1a) 使用我们制作表格的函数/代码从商品销售更新以影响 merch_stock 表格?
1b) 在 merch_stock 上,如果 total_sold > stock 则回滚事务或在插入前设置触发器?
- 链接商品表和 merch_stock 表上的库存的程序?
我不确定这些事情是否可行,所以如果有人能帮忙,那就太好了!谢谢!
解决方案
做这样的事情:
delimiter |
CREATE TRIGGER before_insert_in_Merchandise_Sales BEFORE INSERT ON Merchandise_Sales FOR EACH ROW
BEGIN
DECLARE v_total_stock int default 0;
DECLARE v_total_sold int default 0;
-- get total quantity of marchandise
SELECT sum(STOCK) into v_total_stock from Merchandise where ID_MERCH =new.ID_MERCH ;
SELECT sum(QUANTITY_SOLD )into v_total_solde from Merchandise_Sales where ID_MERCH =new.ID_MERCH ;
IF(v_total_solde + new.QUANTITY_SOLD > v_total_stock) THEN
-- rollback
rollback;
END IF;
END|
DELIMITER |
推荐阅读
- android - 如何获取在另一个活动的 viewText 中选择的 GridView 数据
- javascript - ReactJS 中的 jQuery wrap 等价物
- java - JsonPathResultMatchers 无法成功验证响应
- android - 应用程序在 Android Studio 3.0 上创建抽屉活动时崩溃
- c++ - 可变参数模板和 std::function
- java - Apache POI Classnotfound 异常 org.apache.poi.ss.usermodel.Cell
- django-cms - django-cms 字符串替换输出
- composer-php - 如何从 Satis 发送消息以在作曲家控制台中显示?
- rest - Apache Shiro 和 JWT 在每个用户使用不同密钥时的实现问题
- python - MacOSX PyQt 抓取屏幕外的区域