sql >> Databasteknik >  >> RDS >> Mysql

Uppdatering av sammanfattningstabellen baserat på triggers och lagrade procedurer

Tja, du frågar om DB om och om igen för data som du redan känner till.

Varför inte bara uppdatera sammanfattningen med bara ändringarna.

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 ;

Detta kommer att vara mycket mycket snabbare och mer till punkt och mycket mer elegant.



  1. Lägg till saknad data från föregående månad eller år kumulativt

  2. Mysql-fel #1305 FUNKTION db.sys_exec existerar inte

  3. Hitta närmaste matchande strängar och dess delsträngar med hjälp av SQL-fråga

  4. psql - spara resultat av kommandot till en fil