¿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 uno 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 la propiedad MAX_ROWS no es un límite MAX_ROWS (“almacenar no más de 100 000 filas y eliminar otras”), sino una pista para el motor de base de datos que esta tabla tendrá POR LO MENOS 100 000 filas.

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

Otra solución es borrar la tabla con script cron cada N minutos. Esta es la forma más sencilla, pero aún necesita otro sistema para vigilar.

Alguien sabe una mejor solución? 🙂

Intenta restringir el agregar un nuevo registro a una tabla. Se 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 la instrucción SIGNAL // RESIGNAL para generar un error.

  • Crea una tabla con 100,000 filas.
  • Rellene previamente uno de los campos con un “sello de tiempo” en el pasado.
  • Seleccione el registro más antiguo, actualice la “marca de tiempo” al “crear” (actualizar) el registro.
  • Solo use seleccionar y actualizar, nunca use insertar o eliminar.
  • El índice inverso en el campo “sello de tiempo” hace que la selección / actualización sea rápida.

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

Solo estoy inventando una respuesta en la parte superior de mi cabeza. Mi suposición es que quieres algo así como un ‘cubo’ en el que pones registros, y que quieres vaciarlo antes de que llegue a un número determinado de registros.

Después de una instrucción de inserción, ejecute SELECT LAST_INSERT_ID(); que le proporcionará el incremento automático de una identificación de registro. Sí, aún debe ejecutar una consulta adicional, pero requerirá pocos recursos. Una vez que alcanzas un cierto conteo, truncas la tabla y restableces el ID de incremento automático .

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