Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como faço para redefinir os números de sequência para se tornarem consecutivos?

Se o campo for sua chave primária...


...então, como dito em outro lugar nesta questão, você não deveria estar alterando os IDs. Os IDs já são únicos e você não precisa nem deseja reutilizá-los.

Agora, isso disse...

Caso contrário...


É bem possível que você tenha um diferente campo (ou seja, bem como o PK) para alguma ordenação definida pelo aplicativo. Contanto que essa ordenação não seja inerente a algum outro campo (por exemplo, se for definido pelo usuário), não há nada de errado com isso.

Você pode recriar a tabela usando um (temporário) auto_increment campo e, em seguida, remova o auto_increment mais tarde.

Eu ficaria tentado a UPDATE em ordem crescente e aplique uma variável de incremento.
SET @i = 0;
UPDATE `table`
   SET `myOrderCol` = @i:[email protected]+1
 ORDER BY `myOrderCol` ASC;



Parece um desperdício fazer isso todas as vezes você exclui itens, mas infelizmente com essa abordagem de ordenação manual não há muito o que fazer se quiser manter a integridade da coluna.

Você poderia reduzir a carga, de modo que depois de excluir a entrada com myOrderCol igual a, digamos, 5 :
SET @i = 5;
UPDATE `table`
   SET `myOrderCol` = @i:[email protected]+1
 WHERE `myOrderCol` > 5
 ORDER BY `myOrderCol` ASC;



Isso "embaralhará" todos os valores a seguir em um.