Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mettre à jour une autre table après insertion à l'aide d'un déclencheur ?

Si vous n'attendez pas d'énormes quantités de données, utilisez une vue ou une procédure stockée pour calculer à la volée et renvoyer la quantité réelle. Cela peut vous éviter bien des maux de tête à long terme.

Votre vue (en fait, les vues) pourrait ressembler à

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;

Quand nous le faisons

SELECT * FROM vw_table1;

obtiendra

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

Voici SQLFiddle démo

Maintenant, si vous souhaitez pour une raison quelconque gérer la quantité de votre inventaire avec un déclencheur, cela pourrait ressembler à ceci

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

Voici SQLFiddle démo