Mysql
 sql >> база данни >  >> RDS >> Mysql

Актуализиране на друга таблица след вмъкване с помощта на тригер?

Ако не очаквате огромни количества данни, използвайте изглед или съхранена процедура, за да изчислите в движение и да върнете действителното количество. Това може да ви спести много главоболие в дългосрочен план.

Вашият изглед (всъщност изгледи) може да изглежда така

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;
 

Когато го направим

SELECT * FROM vw_table1;
 

ще получи

<пред>| ID | ПРОДУКТ | КОЛИЧЕСТВО |-----------------------| 1 | мишка | 8 | -- количеството е актуално| 2 | клавиатура | 15 || 3 | монитор | 8 |

Ето SQLPiddle демонстрация

Сега, ако по някаква причина искате да управлявате количеството на инвентара си със задействане, може да изглежда така

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

Ето SQLPiddle демонстрация




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:изберете всички уникални стойности в таблица А, които не са в таблица Б

  2. Групово вмъкване или актуализиране с Hibernate?

  3. Премахнете последната запетая или предотвратите отпечатването й на всички MySQL/PHP

  4. Сравняване на времената за отказ на прокси сървъра на базата данни - ProxySQL, MaxScale и HAProxy

  5. Добавяне на външен ключ от тип char в mysql