Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Eine andere Tabelle nach dem Einfügen mit einem Trigger aktualisieren?

Wenn Sie keine großen Datenmengen erwarten, verwenden Sie eine Ansicht oder eine gespeicherte Prozedur, um spontan zu berechnen und die tatsächliche Menge zurückzugeben. Es kann Ihnen auf lange Sicht eine Menge Kopfschmerzen ersparen.

Ihre Ansicht (eigentlich Ansichten) könnte so aussehen

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;

Wenn wir das tun

SELECT * FROM vw_table1;

bekommen

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

Hier ist SQLFiddle Demo

Wenn Sie nun aus irgendeinem Grund Ihre Bestandsmenge mit einem Auslöser verwalten möchten, könnte dies so aussehen

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

Hier ist SQLFiddle Demo