Eu tenho uma tabela MySQL com uma chave primária de incremento automático. Eu apaguei algumas linhas no meio da tabela. Agora, por exemplo, tenho algo assim na coluna ID: 12, 13, 14, 19, 20. Excluí as 15, 16, 17 e 18 linhas.
Quero reatribuir / redefinir / reordenar a chave primária para ter continuidade, ou seja, fazer 19 a 15, 20 a 16, e assim por diante.
Como eu posso fazer isso?
Mesmo que essa pergunta pareça bastante antiga, postará uma resposta para alguém que chegar aqui pesquisando.
Se a coluna for usada como chave estrangeira em outras tabelas, certifique-se de usar em
ON UPDATE CASCADE
vez do padrãoON UPDATE NO ACTION
para o relacionamento de chave estrangeira nessas tabelas.Além disso, para redefinir a
AUTO_INCREMENT
contagem, você pode emitir imediatamente a seguinte declaração.Para MySQLs, ele redefinirá o valor para
MAX(id) + 1
.fonte
.
id` = @count: = @count + 1`. Na documentação: "O valor no lado direito pode ser um valor literal, outra variável que armazena um valor ou qualquer expressão legal que produza um valor escalar"Para redefinir os IDs da minha tabela de usuário, eu uso a seguinte consulta SQL. Foi dito acima que isso arruinará qualquer relacionamento que você possa ter com outras tabelas.
fonte
Você pode simplesmente usar esta consulta
fonte
Eu acho que isso fará isso
fonte
Ou, no PhpMyAdmin, remova o sinalizador "AutoIncrement", salve, defina-o novamente e salve.
fonte
se você quiser
order by
fonte
em phpmyadmin
vá para sua tabela-> clique no menu de operações-> vá para opções de tabela-> altere AUTO_INCREMENT para aquele no de onde você deseja iniciar.
seu incremento automático de tabela começa com isso não.
tente.
fonte
Você pode remover a funcionalidade de incremento automático da chave primária dessa coluna e, sempre que atualizar essa coluna, execute uma consulta com antecedência que contará todas as linhas da tabela e, em seguida, execute um loop que itera através dessa contagem de linhas, inserindo cada valor no respectiva linha e, finalmente, execute uma consulta inserindo uma nova linha com o valor dessa coluna sendo a contagem total de linhas mais uma. Isso funcionará perfeitamente e é a solução mais absoluta para alguém tentando realizar o que você é. Aqui está um exemplo de código que você pode usar para a função:
Aqui, criei uma matriz associativa que havia anexado a uma coluna de classificação com a consulta em uma consulta de seleção, que dava a cada linha um valor de classificação começando com 1. Depois, iterava pela matriz associativa.
Outra opção seria obter a contagem de linhas, executar uma consulta de seleção básica, obter a matriz associativa e iterá-la da mesma maneira, mas com uma variável adicionada que é atualizada a cada iteração. Isso é menos flexível, mas realizará a mesma coisa.
fonte
para o InnoDB, faça isso (isso removerá todos os registros de uma tabela, faça uma bakcup primeiro):
fonte
Eu tinha as mesmas dúvidas, mas não consegui fazer nenhuma alteração na tabela, decidi fazer o seguinte, visto que meu ID não excedia o número máximo definido na variável @count:
A solução leva, mas é segura e era necessária porque minha tabela possuía chaves estrangeiras com dados em outra tabela.
fonte
A melhor opção é alterar a coluna e remover o atributo auto_increment. Em seguida, emita outra instrução alter e coloque auto_increment novamente na coluna. Isso redefinirá a contagem para o máximo + 1 das linhas atuais e, assim, preservará as referências de chave estrangeira de volta a esta tabela, de outras tabelas no banco de dados ou de qualquer outro uso de chave para essa coluna.
fonte
Minha opinião é criar uma nova coluna chamada row_order. reordene essa coluna. Não estou aceitando as alterações na chave primária. Como exemplo, se a coluna da ordem for banner_position, eu fiz algo parecido com isto: Isto é para excluir, atualizar e criar a coluna de posição do banner. Chame esta função, reordene-os respectivamente.
fonte
Isso funciona - https://stackoverflow.com/a/5437720/10219008.....mas, se você tiver um problema 'Código de erro: 1265. Dados truncados para a coluna' id 'na linha 1' ... Em seguida, execute Os seguintes. Adicionando ignorar na consulta de atualização.
fonte
Você também pode simplesmente evitar o uso de IDs numéricos como Chave Primária. Você pode usar os códigos de país como identificação principal se a tabela contiver informações sobre os países ou os links permanentes, se contiver artigos, por exemplo.
Você também pode simplesmente usar um valor aleatório ou MD5. Todas essas opções têm seus próprios benefícios, especialmente no setor de TI. IDs numéricos são fáceis de enumerar.
fonte