在table2中插入记录后更新table1

时间:2018-10-31 04:05:00

标签: mysql

在销售表中插入记录时,我需要更新产品表中的库存。

这些是我的桌子:

餐桌产品:

curl -XGET -H "Content-Type: application/json" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" http://<YOUR-GITLAB-SERVER>/api/v3/projects/<YOUR-NAMESPACE>%2F<YOUR-PROJECT-NAME> | python -mjson.tool

销售表:

curl -XGET -H "Content-Type: application/json" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" http://<YOUR-GITLAB-SERVER>/api/v3/projects/<YOUR-NAMESPACE>%2F<YOUR-PROJECT-NAME> | python -c 'import sys, json; print(json.load(sys.stdin)["id"])'

这些是我的存储过程:

idprod int primary key  
name varchar (20)  
description varchar (100)  
int stock

首先,我用一些数据填充表产品,然后调用过程add_sale。我对sales表中的第一个记录没有任何问题,但是当我添加更多记录时,products表中所有产品的库存都会更新,而不仅仅是一个。

2 个答案:

答案 0 :(得分:0)

我已经阅读了您的问题,您有两个存储过程,但是在update_stock()存储过程中,您尚未定义WHERE子句,因此您的存储过程应该像这样

 create procedure update_stock(  
    @id int
    )
    begin  
    update products  p,
     sales s  
    set products.stock = products.stock-s.quantity WHERE p.idprod = s.idprod and WHERE p.idprod=@idvalue ;  
    end

答案 1 :(得分:0)

您的更新子句中缺少插入的产品ID。您必须通过update_stock()通话来传递它。

修改update_stock过程以将产品ID和数量作为输入,如下所示。

CREATE PROCEDURE update_stock(IN pid INT, IN qua INT)
BEGIN
  UPDATE products  
  SET stock = stock - qua
  WHERE idprod = pid; 
END

通过将qua传递给该过程,我们可以防止额外连接到另一个表。

然后通过传递update_stockadd_sale,在pid中调用qua方法,如下所示。

call update_stock (p_id, qua);