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

Atualizando a tabela de resumo com base em gatilhos e procedimentos armazenados


Bem, você está consultando o banco de dados repetidamente em busca de dados que você já conhece.

Por que não apenas atualizar o resumo apenas com as alterações.
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 ;

Isso será muito mais rápido e mais ao ponto muito mais elegante.