¿Cómo puedo establecer un número máximo de filas en la tabla MySQL?

Necesito establecer un límite máximo de filas en mi tabla MySQL. La documentación nos dice que se puede usar el siguiente código SQL para crear una tabla:

CREATE TABLE `table_with_limit` 
   `id` int(11) DEFAULT NULL
) ENGINE=InnoDB MAX_ROWS=100000

Pero MAX_ROWS La propiedad no es un límite estricto ("no almacenar más de 100 000 filas y eliminar otras"), sino una sugerencia para el motor de la base de datos de que esta tabla tendrá AL MENOS 100 000 filas.

La única forma posible que veo para resolver el problema es usar BEFORE INSERT disparador que verificará el recuento de filas en la tabla y eliminará las filas más antiguas. Pero estoy bastante seguro de que esto es un gran recalentamiento: /

Otra solución es limpiar la tabla con el script cron cada N minutos. Esta es la forma más sencilla, pero aún necesita otro sistema a tener en cuenta.

¿Alguien conoce una mejor solución? :)

preguntado el 08 de noviembre de 11 a las 09:11

4 Respuestas

Intente hacer una restricción para agregar un nuevo registro a una tabla. Genera un error cuando se va a agregar un nuevo registro.

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 ;

Tenga en cuenta que la operación COUNT puede ser lenta en grandes tablas InnoDb.

En MySQL 5.5 puede usar SEÑAL // SEÑAL declaración para generar un error.

Respondido 20 ago 18, 13:08

Marcaré tu respuesta como correcta ya que es la más interesante. ¡Gracias! - WASD42

  • Crea una tabla con 100,000 filas.
  • Rellene previamente uno de los campos con una "marca de tiempo" en el pasado.
  • Seleccione el registro más antiguo, actualice la "marca de tiempo" cuando "cree" (actualice) el registro.
  • Utilice solo seleccionar y actualizar, nunca insertar ni eliminar.
  • El índice inverso en el campo de "sello de tiempo" agiliza la selección / actualización.

respondido 09 nov., 11:09

esto parece MUCHO más trabajo que insertar y truncar la tabla cuando se alcanza el límite. - Jakub

No hay forma de limitar el número máximo de filas de una tabla en MySQL, a menos que escriba un Trigger para hacer eso.

respondido 08 nov., 11:13

Me estoy inventando una respuesta que se me viene a la cabeza. Mi suposición es que usted quiere algo como un 'cubo' donde coloca registros, y que desea vaciarlo antes de que alcance un cierto número de registros.

Después de una declaración de inserción, ejecute SELECT LAST_INSERT_ID(); que le dará el incremento automático de una identificación de registro. Sí, todavía tiene que ejecutar una consulta adicional, pero requerirá pocos recursos. Una vez que alcance un cierto recuento, truncar la mesa y restablecer la identificación de incremento automático.

De lo contrario, no puede tener una tabla 'limitada' en mysql, ya que tendría que tener acciones predefinidas como (¿no permitimos el registro, truncamos la tabla? Etc.).

respondido 08 nov., 11:19

Truncar elimina todas las filas de una tabla, no concatenarla en N filas: / - WASD42

cierto ... ¿lo entendí mal? Pensé que querías "vaciar" la mesa cuando se alcanzara el límite. ¿No? - Jakub

No, necesito eliminar filas obsoletas (más antiguas) de la tabla, no todas :) - WASD42

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.