Cho*_*tin 2 mysql sql triggers
我目前正在创建某种库存系统.
我在tbl1哪里保存物品.在tbl1,我有列qty或剩余的可用库存.
TBL1:
id product qty
1 mouse 10
2 keyboard 15
3 monitor 8
Run Code Online (Sandbox Code Playgroud)
我也有表格tbl2,我在发布项目中保存所有交易.在这张表中有issued_qty.
TBL2
id requested_by product issued_qty
1 john mouse 2
Run Code Online (Sandbox Code Playgroud)
我的问题是如何tbl2在UPDATE的同时插入一行tbl1.qty (tbl1.qty - tbl2.issued_qty).
例如:当我tbl2在requested_by,product和qty_issued中插入记录时,我想要tbl1自动更新.因为我们向约翰发出了2(数量)的鼠标.鼠标在tbl1中的记录,应该自动少于no.发行数量tbl2
我的想法是使用 TRIGGER
但不幸的是我没有成功..你可以帮助我这一个..
谢谢.
如果您不期望大量数据,请使用视图或存储过程进行即时计算并返回实际数量.从长远来看,它可以为您节省很多麻烦.
您的视图(实际上是视图)可能看起来像
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;
Run Code Online (Sandbox Code Playgroud)
当我们这样做
SELECT * FROM vw_table1;
Run Code Online (Sandbox Code Playgroud)
会得到的
| 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;
Run Code Online (Sandbox Code Playgroud)
这是SQLFiddle演示