sql >> Databasteknik >  >> RDS >> Mysql

Uppdatera en annan tabell efter infogning med en trigger?

Om du inte förväntar dig stora mängder data, använd en vy eller en lagrad procedur för att beräkna i farten och returnera den faktiska kvantiteten. Det kan spara dig mycket huvudvärk i det långa loppet.

Din vy (faktiskt visningar) kan se ut som

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;

När vi gör det

SELECT * FROM vw_table1;

kommer att få

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

Här är SQLFiddle demo

Om du nu av någon anledning vill hantera din lagerkvantitet med en trigger kan det se ut så här

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

Här är SQLFiddle demo




  1. ActiveRecord::AdapterNotSpecified databaskonfiguration anger inte adapter

  2. Table Print passar inte till sidstorleken

  3. MySql 8.0.15 installationsfel Ogiltig servermall

  4. 100% säkert sätt att lagra html i MySQL