Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zaktualizować inną tabelę po wstawieniu za pomocą wyzwalacza?

Jeśli nie spodziewasz się ogromnych ilości danych, użyj widoku lub procedury składowanej, aby obliczyć na bieżąco i zwrócić rzeczywistą ilość. Na dłuższą metę może to zaoszczędzić wiele bólu głowy.

Twój widok (w rzeczywistości widoki) może wyglądać tak

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;

Kiedy to zrobimy

SELECT * FROM vw_table1;

dostanie

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

Oto SQLFiddle demo

Teraz, jeśli z jakiegoś powodu chcesz zarządzać ilością zapasów za pomocą wyzwalacza, może to wyglądać tak

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

Oto SQLFiddle demo




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego ta instrukcja SQL INSERT zwraca błąd składni?

  2. PHP Wyszukiwanie i sortowanie MySQL według trafności

  3. Usuń używając wielu tabel i powtórz tabelę w podzapytaniu

  4. Nie mogę zainstalować mysql gem na OS X

  5. MySQL - GROUP_CONCAT z przyłączeniami