小编典典

使用触发器插入后更新另一个表吗?

sql

我目前正在创建某种库存系统。

我在tbl1哪里保存项目。在中tbl1,我有一栏qty或剩余的可用库存。

tbl1:

id product  qty
1  mouse    10
2  keyboard 15
3  monitor  8

我还有一个表tbl2,我将所有交易保存在该表中。在这张桌子上有issued_qty

tbl2

id requested_by product  issued_qty
1  john         mouse    2

我的问题是如何tbl2在UPDATE的同时插入一行tbl1.qty (tbl1.qty - tbl2.issued_qty)

例如:当我在tbl2request_by,product和qty_issued中插入记录时,我希望tbl1可以自动更新。因为我们向John发出了2(数量)的鼠标。tbl1中的鼠标记录应自动减少到“
no”。的发行数量tbl2

我的想法是使用 TRIGGER

但不幸的是我没有成功..请你帮我这个忙..

谢谢。


阅读 214

收藏
2021-04-07

共1个答案

小编典典

如果您不希望有大量数据,请使用视图或存储过程即时计算并返回实际数量。从长远来看,这可能会减轻您的很多麻烦。

您的视图(实际上是视图)可能看起来像

CREATE VIEW vw_table2_sum AS
SELECT product, SUM(issued_qty) qty
  FROM Table2
 GROUP BY product;

CREATE VIEW vw_table1 AS
SELECT t.id, t.product, t.qty - COALESCE(v.qty, 0) qty
  FROM Table1 t LEFT JOIN vw_table2_sum v
    ON t.product = v.product;

当我们做

SELECT * FROM vw_table1;

会得到

| ID |  PRODUCT | QTY |
-----------------------
|  1 |    mouse |   8 | -- the quantity is current
|  2 | keyboard |  15 |
|  3 |  monitor |   8 |

这是 SQLFiddle 演示

现在,如果您出于某种原因想要使用触发器来管理库存数量,则可能看起来像这样

CREATE TRIGGER tg_ai_table2
AFTER INSERT ON table2
FOR EACH ROW
  UPDATE Table1
     SET qty = qty - NEW.issued_qty
   WHERE product = NEW.product;

这是 SQLFiddle 演示

2021-04-07