首页 > 解决方案 > 如何在一个表中插入影响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 则回滚事务或在插入前设置触发器?

  1. 链接商品表和 merch_stock 表上的库存的程序?

我不确定这些事情是否可行,所以如果有人能帮忙,那就太好了!谢谢!

标签: mysql

解决方案


做这样的事情:

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 |

推荐阅读