sql >> Databáze >  >> RDS >> Mysql

Aktualizovat další tabulku po vložení pomocí spouštěče?

Pokud neočekáváte velké množství dat, použijte zobrazení nebo uloženou proceduru k průběžnému výpočtu a vrácení skutečného množství. Z dlouhodobého hlediska vám to může ušetřit spoustu bolesti hlavy.

Vaše zobrazení (ve skutečnosti zobrazení) může vypadat takto

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;

Když to uděláme

SELECT * FROM vw_table1;

dostane

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

Zde je SQLFiddle demo

Nyní, pokud z nějakého důvodu chcete spravovat množství zásob pomocí spouštěče, může to vypadat takto

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

Zde je SQLFiddle demo




  1. Postgres - Funkce pro návrat průsečíku 2 POLE?

  2. Problémy s createdb v postgresu

  3. Kdy se časové razítko (automaticky) aktualizuje?

  4. pokud tabulka neexistuje, proveďte dlouhý dotaz