Pregunta

Tengo una aplicación web en la que interactúo con una base de datos MySQL. Al eliminar un registro, parece que la ranura se vuelve a utilizar la próxima vez que cree un nuevo registro. Dado que cada registro tiene una clave principal secuencial, el próximo disco tendrá un duplicado de la llave decir 5, pero el nuevo registro será colocado en el último lugar de vaciado, por ejemplo, donde el registro número 2 solía ser. ¿Hay una manera de tener nuevos registros añadidos directamente en la parte inferior de la lista? ¿Hay una manera de hacer eso con MySQL Query Browser, tal vez?

Este es un ejemplo de lo que estoy describiendo:

1 userName1 password1
2 userName2 password2 --> next operation will delete this record
3 userName3 password3
4 userName4 password4

cuando el registro # 2 se ha ido, la próxima vez que hago un nuevo complemento, ficha # 5 ocupa lugar número 2:

1 userName1 password1
5 userName5 password5
3 userName3 password3
4 userName4 password4

¿Hay un método recomendado para instruir a MySQL (tal vez en la creación de tablas) que los nuevos registros sólo se deben añadir en la parte inferior de la lista? Por lo tanto, nos gustaría deshabilitar el registro-reutilización automática.

Gracias de antemano por su ayuda Un cordial saludo

¿Fue útil?

Solución

Sólo tienes que añadir

ORDER BY id

al final de la consulta (donde "id" es la 1, 2, 3, 4, 5 columna de la tabla)

Otros consejos

Se puede crear un disparador "de inserción", que utiliza una secuencia para establecer el ID (la escritura de la memoria de acuerdo a Oracle, por lo que tendrá que comprobar si es diferente en MySQL):

create sequence table_name_id_seq order nocache cycle maxvalue 99999999;

create or replace trigger table_name_id
before insert on table_name for each row
begin
  select table_name_id_seq.nextval
    into :new.id
    from dual
  ;
end;

InnoDB se encargará de que para usted en algún nivel. Todas las tablas InnoDB tienen algún tipo de clave principal que se agrupan, y los que son típicamente configuración para manejar los insertos de forma secuencial.

Si está impedido de utilizar InnoDB, creo que tendrá que recurrir al cambio de código fuente para adaptarse cómo funciona MyISAM. No estoy particularmente familiarizado con cualquier otro motor "normal" de almacenamiento de MySQL, así que no estoy seguro si hay otra alternativa.

creación de campo de fecha (DATE_ADDED) y ORDER BY DATE_ADDED sería mejor

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top