Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Atualizando e excluindo dados

Olá, não sei se isso será abordado mais a frente no curso, mas é uma dúvida que gostaria de sanar o mais breve. Usando o comando DELETE notei que quando usei pra deletar os valores de um linha, não atualiza os valores da chave primária. Por exemplo: Tenho 20 valores que são identificados de 1 a 10 pelo auto-increment quando foi criada a tabela, e uso o comando DELETE para apagar os dados da linha 5. Notei que no banco de dados quando uso o SELECT para ver os dados mostra os dados 1,, 2, 3, 4, 6, 7, 8 ,9, 10. Queria saber o porque ele não mostra de 1 até 9 que seria o óbvio ou se devemos fazer algo para ele fazer essa atualização. Grato.

5 respostas

Olá, a propriedade auto-increment é a para inserção de valores novos. Por exemplo se agora adicionar mais um informação nesta tabela ela terá 21 (tabelas de 20 Valores). O comando delete apagou a toda a informação da linha 5 mas não entrara as demais linhas.

A dúvida não sobre o comando AUTO-INCREMENT. Colocando num exemplo mais simples de explicar: Tenho uma tabela com 3 linhas, na Coluna id ficaria 1, 2, 3, uma abaixo do outro. Se eu uso o comando DELETE WHERE ID = 2 e em seguida uso o comando SELECT pra mostrar os valores da tabela são mostrados as linhas 1 e 3, uma em baixo da outra.

O que eu queria saber era se teria algum comando que após deletar essa linha, as posteriores subissem na posição da coluna, nesse caso, deletando a linha 2, a linha 3 ficaria no lugar da linha 2 sendo mostrado lá 1 e 2 e não 1 e 3. Grato

Olá Otacílio,

Para tal atividade acredito que provavelmente seria necessário resetar o ID dos registros.

Não sei como seria escrito em MYSQL, mas o algoritmo seria algo como:

Variável número = 0

Atualizar sua_tabela ID = variável número = variável número + 1

Alterar tabela sua_tabela AUTO_INCREMENT = 1

Poderia, por favor, testar e dizer se atende sua curiosidade?

solução!

Geralmente isso não é uma boa decisão na maioria dos casos, em virtude das tabelas possuírem uma FOREIGN KEY se relacionando com outras, e caso mudem sua PRIMARY KEY, poderá mudar a ordem com a qual ela se relaciona com essas tabelas.

Caso realmente deseja isso, faça:

SET @contador= 0;

UPDATE tabela SET tabela.id = @contador:= @contador+ 1;

Caso o faça e tenha FOREIGN KEYS em sua tabela, no momento de sua criação, utilize o ON UPDATE CASCADE após definir a PRIMARY KEY.

João Luíz, não entendi muito bem sua explicação, mesmo assim muito obrigado pela atenção.

Felipe Wagner, entendi o que você explicou em relação as FOREIGN KEYS na questão de ser possível afetar o relacionamento entre elas, mas não entendi bem como esses comandos funcionam, mas acho que é questão de prática mesmo, vou exercitar alguns aqui pra fixar bem.

Obrigado a todos.