0

我有以下产品表

id | companyID | prodID | price | stock | stockAvailable | sumStock
1    A           2         10      5       4                    
2    B           2         50      10      5

当我更新将更新 sumStock 的产品行时,我需要一个触发器。

我是触发器的新手,我的尝试失败了:

CREATE TRIGGER `SalesDB`.`stockSumUpdate` BEFORE UPDATE
    ON SalesDB.Product FOR EACH ROW
BEGIN
SET Product.sumStock = Product.stock + Product.stockAvailable
END

在这种情况下,我的目标是计算 SUM(stock) AS stockSum Where ProductID=2 在这种情况下为 15,然后将其添加到 sumStock。然后将 stockAvailable 列也添加到该列。因此,在两个列的 sumStock 中,我将有 24 个。

结果将是:

id | companyID | prodID | price | stock | stockAvailable | sumStock
1    A           2         10      5       4               29     
2    B           2         50      10      5               29
4

1 回答 1

2

试试这个语法:

CREATE TRIGGER `SalesDB`.`stockSumUpdate` BEFORE UPDATE
    ON SalesDB.Product FOR EACH ROW
BEGIN
    SET NEW.sumStock = NEW.stock + NEW.stockAvailable
END;

这增加了表格的一行。

要获得总数,您将使用以下内容:

CREATE TRIGGER `SalesDB`.`stockSumUpdate` BEFORE UPDATE
    ON SalesDB.Product FOR EACH ROW
BEGIN
    SET NEW.sumStock = (select sum(stock + stockAvailable)
                        from products where p.prodid = new.prodid and p.id <> id
                       ) + NEW.stock + NEW.stockAvailable;
END;

除了,这仍然不能做你想做的事。如果您一次更新多行,您将获得不同的总库存值。

换句话说,每当您更新单行时,您都会尝试更新一组行。天哪,当这样说的时候,这似乎不是一个好主意。第二组 udpates 可以更新更多的行等等(因为产品不会发生)。

相反,创建一个表,其中产品作为主键,并且该表中可用的库存(可能是现有表)。然后每次在此表中发生更改时更新汇总表。

于 2013-05-22T16:06:02.167 回答