Mysql
 sql >> Database >  >> RDS >> Mysql

Aggiornare un'altra tabella dopo l'inserimento utilizzando un trigger?

Se non ti aspetti enormi quantità di dati, utilizza una vista o una procedura memorizzata per calcolare al volo e restituire la quantità effettiva. Potrebbe risparmiarti un sacco di mal di testa a lungo termine.

La tua vista (in realtà viste) potrebbe assomigliare a

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;

Quando lo facciamo

SELECT * FROM vw_table1;

otterrà

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

Ecco SQLFiddle demo

Ora, se per qualche motivo desideri gestire la quantità di inventario con un trigger, potrebbe essere simile a questo

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

Ecco SQLFiddle demo