Pergunta

Tenho uma aplicação web onde eu interagir com um banco de dados MySql. Quando eu excluir um registro, parece que seu slot é reutilizado na próxima vez que criar um novo registro. Uma vez que cada disco tem uma chave primária seqüencial, o próximo álbum terá uma nova chave de dizer 5, mas o novo registro será colocado no último lugar esvaziado, dizer onde o registo 2 costumava ser. Existe uma maneira de ter novos registros adicionados diretamente na parte inferior da lista? Existe uma maneira de fazer isso com o MySQL Query Browser, talvez?

Este é um exemplo do que estou descrevendo:

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

quando o registro nº 2 é ido, da próxima vez eu faço um novo add, ficha nº 5 ocupa o número 2 local:

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

Existe uma maneira recomendada para instruir MySQL (talvez na criação da tabela) que os novos registros só deve ser adicionado na parte inferior da lista? assim, gostaríamos de desativar o recorde de reutilização automática.

Agradecemos antecipadamente a sua ajuda Melhores cumprimentos

Foi útil?

Solução

Basta adicionar

ORDER BY id

para o fim da sua consulta (onde "id" é o 1, 2, 3, 4, 5 coluna na tabela)

Outras dicas

Você pode criar um gatilho "na inserção", que usa uma seqüência para definir o ID (escrita de memória de acordo com a Oracle, então você tem que verificar se ele é diferente no 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 irá lidar com isso para você em algum nível. Todas as tabelas InnoDB ter alguma forma de chave primária que é agrupado, e esses são normalmente configurado para inserções punho sequencialmente.

Se você está impedido de usar InnoDB, eu acredito que você vai ter que recorrer a alterar o código fonte para se adaptar como MyISAM funciona. Eu não estou particularmente familiarizado com qualquer outro mecanismo de armazenamento "normal" para o MySQL, então eu não tenho certeza se há uma outra alternativa.

criação de campo de data (DATE_ADDED) e ORDER BY DATE_ADDED seria melhor

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top