Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Aktualisieren der Übersichtstabelle basierend auf Triggern und gespeicherten Prozeduren

Nun, Sie fragen die DB immer wieder nach Daten ab, die Sie bereits kennen.

Warum aktualisieren Sie nicht einfach die Zusammenfassung nur mit den Änderungen?

DELIMITER $$

CREATE TRIGGER ai_base_each AFTER INSERT ON base FOR EACH ROW
BEGIN
  INSERT INTO summary (status, count) VALUES (NEW.status,1)
  ON DUPLICATE KEY UPDATE
    SET count = count + 1;
END $$

CREATE TRIGGER ad_base_each AFTER DELETE ON base FOR EACH ROW
BEGIN
  UPDATE summary s
    SET s.count = s.count - 1 
    WHERE s.status = OLD.status;
END $$


CREATE TRIGGER au_base_each AFTER UPDATE ON base FOR EACH ROW
BEGIN
  UPDATE summary s
    SET s.count = s.count - 1 
    WHERE s.status = OLD.status;

  INSERT INTO summary (status, count) VALUES (NEW.status,1)
  ON DUPLICATE KEY UPDATE
    SET count = count + 1;
END $$

DELIMITER ;

Das geht viel viel schneller und zielgerichteter viel eleganter.