Eu tenho uma tabela que contém um ID de chave primária incrementado automaticamente. Se eu excluir a última linha (ID mais alta, por exemplo, ID de exemplo = 6) e inserir uma nova linha, o novo ID começará em 7. Qual parâmetro eu tenho que alterar para que a chave primária comece em 6?
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM;
INSERT INTO animals (name) VALUES
('dog'),('cat'),('penguin'),
('lax'),('whale'),('ostrich');
Resultado:
nome do id
1 cachorro
2 gato
3 pinguim
4 lax
5 baleia
6 avestruz
DELETE FROM animals WHERE id = 6;
INSERT INTO animals (name) VALUES
('x');
Resultado:
id nome
1 cachorro
2 gato
3 pinguim
4 lax
5 baleia
7 x
Obrigado pelo conselho.
mysql
primary-key
mariadb
auto-increment
Giordano
fonte
fonte
Respostas:
Isso ocorre por design - todos os DBMS agem assim com colunas de incremento automático.
Se não a integridade referencial externa, poderia ser danificada. Para um exemplo simples disso, imagine que você está armazenando URLs para um serviço de encurtamento usando uma coluna de incremento automático como chave. Você ainda não sabe se o URL encurtado já foi fornecido a alguém, e o banco de dados certamente não, portanto, a reutilização da ID 1234 pode resultar na avó pobre de alguém visitando somenastypornsite.xxx em vez de loverlyknitting.org quando ela clicar em http: / /shortthi.ng/1234 em um email antigo, em vez de receber a mensagem "desculpe, mas este link não existe mais em nossos registros".
Além disso, se você redefinir o incremento após excluir o último item, você também estará realizando todo o trabalho (ou espera que o banco de dados) renumere tudo após o 5º item de 5 milhões quando o 5º item for removido? completo com alterações em outras tabelas nas quais existem restrições de chave estrangeira apontando para a coluna de incremento? Esse trabalho extra pode ficar muito caro em termos de IO.
Se você fazer redefinir o ponto de incremento depois de eliminar o último item, não ser muito, muito cuidadoso de seus níveis de isolamento de transação: Você pode redefini-la apenas como uma outra operação faz uso do valor, levando a erros (ou pior, falhas silenciosas), a menos você garante que sua ação seja totalmente 100% isolada.
Geralmente recomendo que as pessoas que trabalham com bancos de dados leiam "SQL Antipatterns", que possui um capítulo sobre esse assunto chamado "Psuedo-Key Neat Freaks" (que aborda o assunto de uma maneira mais amigável do que o título do capítulo pode implicar para alguns!). Essencialmente, se o valor tiver significado além de ser uma chave (ou, no máximo, transportar informações sobre pedidos de inserção), provavelmente não deve ser uma coluna de incremento automático e se não tiver significado além de ser uma chave (ou, no máximo, levar ordem de inserção) informações), então as lacunas não devem importar.
fonte
Você pode redefinir o valor de incremento automático usando o seguinte:
Você precisaria determinar o valor máximo presente na tabela e adicionar 1 a esse valor para usar na instrução acima.
fonte