Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mise à jour du tableau récapitulatif en fonction des déclencheurs et des procédures stockées

Eh bien, vous réinterrogez la base de données encore et encore pour des données que vous connaissez déjà.

Pourquoi ne pas simplement mettre à jour le résumé avec uniquement les modifications.

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 ;

Ce sera beaucoup plus rapide et plus au point beaucoup plus élégant.