sql >> Base de Datos >  >> RDS >> Mysql

¿Actualizar otra tabla después de insertar usando un disparador?

Si no espera grandes cantidades de datos, use una vista o un procedimiento almacenado para calcular sobre la marcha y devolver la cantidad real. Puede ahorrarle muchos dolores de cabeza a largo plazo.

Su vista (en realidad vistas) podría verse como

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;

Cuando lo hacemos

SELECT * FROM vw_table1;

obtendrá

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

Aquí está SQLFiddle demostración

Ahora, si por alguna razón desea administrar la cantidad de su inventario con un disparador, podría verse así

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

Aquí está SQLFiddle demostración