sql >> Databasteknik >  >> RDS >> Mysql

Begränsar mysql-tabellen till en viss storlek och tar automatiskt bort äldsta poster

Jag föreslår triggers. Detta är det bästa sättet att försäkra sig om att den maximala bordsstorleken beaktas vid varje insats.

Möjlig dubblett av Hur kan jag ställa in ett maximalt antal rader i MySQL-tabellen?

Från det accepterade svaret:

Försök att göra en begränsning för att lägga till en ny post i en tabell. Visa ett felmeddelande när en ny post ska läggas till.

DELIMITER $$

CREATE TRIGGER trigger1
BEFORE INSERT
ON table1
FOR EACH ROW
BEGIN
  SELECT COUNT(*) INTO @cnt FROM table1;
  IF @cnt >= 25 THEN
    CALL sth(); -- raise an error
  END IF;
END
$$

DELIMITER ;

Observera att COUNT operation kan vara långsam på stora InnoDb-tabeller.

På MySQL 5.5 kan du använda SIGNAL-satsen för att skapa ett fel.




  1. Ändlös slinga i triggerfunktion

  2. Jämför arrayer för likhet, ignorera ordningen av element

  3. Oracle DBMS - Läs en tabell innan bearbetning Uppdatering i en AFTER trigger - muterande tabell

  4. Bästa sättet att testa om en rad finns i en MySQL-tabell