sql >> Database >  >> RDS >> Mysql

Een andere tabel bijwerken na het invoegen met behulp van een trigger?

Als u geen enorme hoeveelheden gegevens verwacht, gebruikt u een weergave of een opgeslagen procedure om direct te berekenen en de werkelijke hoeveelheid terug te geven. Het kan u op de lange termijn veel hoofdpijn besparen.

Uw weergave (eigenlijk weergaven) zou eruit kunnen zien als

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;

Wanneer we dat doen

SELECT * FROM vw_table1;

krijgt

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

Hier is SQLFiddle demo

Als u om de een of andere reden uw voorraadhoeveelheid wilt beheren met een trigger, kan dit er als volgt uitzien

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 is SQLFiddle demo




  1. MySQL-aggregatiefuncties zonder GROUP BY-clausule

  2. archief groeperen op jaar en maand met behulp van php en mysql

  3. Hoe kan ik nieuwe kolommen toevoegen aan een SQLite-database nadat de Android-app is uitgebracht?

  4. Verander unieke sleutel samen in mysql