Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Atualizar outra tabela após a inserção usando um gatilho?


Se você não espera grandes quantidades de dados, use uma exibição ou um procedimento armazenado para calcular rapidamente e retornar a quantidade real. Isso pode lhe poupar muita dor de cabeça a longo prazo.

Sua visualização (na verdade visualizações) pode se parecer com
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;

Quando fazemos
SELECT * FROM vw_table1;

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

Aqui está SQLFiddle demonstração

Agora, se você por algum motivo quiser gerenciar sua quantidade de inventário com um acionador, pode ser assim
CREATE TRIGGER tg_ai_table2
AFTER INSERT ON table2
FOR EACH ROW
  UPDATE Table1
     SET qty = qty - NEW.issued_qty
   WHERE product = NEW.product;

Aqui está SQLFiddle demonstração