如何在表中插入影响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),QUANTITY_SOLD int,ID_disT char(10)
);

Merch_Stock 
(ID_MERCH char(20),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 表上的库存的程序?

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

解决方法

做这样的事情:

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 |

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...