Como posso redefinir o AUTO_INCREMENT
campo?
Quero que comece a contar 1
novamente.
TRUNCATE TABLE yourTableName;
Como posso redefinir o AUTO_INCREMENT
campo?
Quero que comece a contar 1
novamente.
TRUNCATE TABLE yourTableName;
Respostas:
Você pode redefinir o contador com:
ALTER TABLE tablename AUTO_INCREMENT = 1
Para o InnoDB, você não pode definir o auto_increment
valor menor ou igual ao índice atual mais alto. (citação da ViralPatel ):
Observe que você não pode redefinir o contador para um valor menor ou igual a qualquer um que já tenha sido usado. Para MyISAM, se o valor for menor ou igual ao valor máximo atualmente na coluna AUTO_INCREMENT, o valor será redefinido para o máximo atual mais um. Para o InnoDB, se o valor for menor que o valor máximo atual na coluna, nenhum erro ocorrerá e o valor atual da sequência não será alterado.
Veja Como redefinir um incremento automático do MySQL usando um valor MAX de outra tabela? sobre como obter dinamicamente um valor aceitável.
circular reference
curcular reference
?
ALTER TABLE tablename AUTO_INCREMENT = 1
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Eu acho que isso fará isso
UPDATE
atualizará todos os valores na id
coluna.
Simplesmente assim:
ALTER TABLE tablename AUTO_INCREMENT = value;
reference: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
significa configurá-lo com o valor padrão ... para que você possa substituir "value" por 1
Existe uma maneira muito fácil com o phpmyadmin na guia "operações", você pode definir, nas opções da tabela, o incremento automático para o número desejado.
A melhor solução que funcionou para mim:
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;
É rápido, funciona com o innoDB e não preciso saber o valor máximo atual! Dessa forma, o contador de incremento automático será redefinido e iniciará automaticamente a partir do valor máximo existente.
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
, enquanto que ALTER TABLE tablename AUTO_INCREMENT = 1
faz não .
As respostas com a classificação mais alta para esta pergunta recomendam "ALTER yourtable AUTO_INCREMENT = value". No entanto, isso só funciona quando value
o alter é maior que o valor máximo atual da coluna de incremento automático. De acordo com a documentação do MySQL 8 :
Você não pode redefinir o contador para um valor menor ou igual ao valor atualmente em uso. Para o InnoDB e o MyISAM, se o valor for menor ou igual ao valor máximo atualmente na coluna AUTO_INCREMENT, o valor será redefinido para o valor máximo atual da coluna AUTO_INCREMENT mais um.
Em essência, você só pode alterar AUTO_INCREMENT para aumentar o valor da coluna de incremento automático, não redefini-lo para 1, conforme solicitado pelo OP na segunda parte da pergunta. Para opções que realmente permitem definir o AUTO_INCREMENT para baixo do seu máximo atual, consulte Reordenar / redefinir a chave primária de incremento automático .
Adicionando uma atualização porque a funcionalidade mudou no MySQL 5.6. No MySQL 5.6, você PODE usar a simples ALTER TABLE com o InnoDB:
ALTER TABLE tablename AUTO_INCREMENT = 1;
Os documentos são atualizados para refletir isso:
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
Meus testes também mostram que a tabela NÃO é copiada, o valor é simplesmente alterado.
Existem boas opções em Como redefinir a coluna de incremento automático do MySQL
Note-se que ALTER TABLE tablename AUTO_INCREMENT = value;
se não trabalhar para InnoDB
DELETE
(ou ROLLBACK
) não recuperará IDs. Uma exceção: após uma reinicialização (ou falha), o próximo ID é calculado MAX(id)+1
, recuperando efetivamente os IDs excluídos no final . Exceção à exceção: o MySQL 8.0 deixa esses IDs não utilizados.
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
Usei isso em alguns dos meus scripts, o campo id é descartado e, em seguida, adicionado novamente com as configurações anteriores, todos os campos existentes na tabela do banco de dados são preenchidos com novos valores de incremento automático, isso também deve funcionar com o InnoDB.
Observe que todos os campos dentro da tabela serão recontados e terão outros IDs !!!.
Você também pode usar a TRUNCATE
tabela de sintaxe como esta:
TRUNCATE TABLE table_name
Cuidado com o radar !! TRUNCATE TABLE your_table
irá apagar tudo no seu your_table
!!
TRUNCATE
também excluirá TODAS as suas linhas na tabela especificada!
TRUNCATE
irá redefinir os auto_increment
campos também? Meu caso de uso é limpar os dados antigos da tabela e iniciar os IDs de 1 novamente para novos dados (imagine, limpando a tabela para uso adequado após a conclusão do teste). Eu pensei que teria que ficar com DROP
a mesa inteira e de CREATE
novo.
auto_increment
valor atual , use em DELETE FROM
vez de TRUNCATE
.
é para mesa vazia:
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
Se você possui dados, mas deseja organizá-los, recomendo o seguinte:
ALTER TABLE `table_name` DROP `auto_colmn`;
ALTER TABLE `table_name` ADD `auto_colmn` INT( {many you want} ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`auto_colmn`);
Aqui está minha solução, mas não aconselho fazer isso se sua coluna tiver restrições ou estiver conectada como chave estrangeira a outras tabelas, pois isso teria efeitos negativos ou nem funcionaria.
ALTER TABLE tbl_name DROP COLUMN column_id
ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST
Isso funciona bem!
No MySQL 5.6, a abordagem abaixo funciona mais rapidamente devido ao DDL online (nota algorithm=inplace
):
alter table tablename auto_increment=1, algorithm=inplace;
Você pode simplesmente truncar a tabela para redefinir a sequência
TRUNCATE TABLE TABLE_NAME
Tentei alterar a tabela e definir auto_increment como 1, mas não funcionou. Resolvi excluir o nome da coluna que estava incrementando, criar uma nova coluna com o seu nome preferido e definir essa nova coluna para incrementar desde o início.
O contador de incremento automático para uma tabela pode ser (re) definido de duas maneiras:
Executando uma consulta, como outros já explicados:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Usando o Workbench ou outra ferramenta visual de design de banco de dados. Vou mostrar no Workbench como isso é feito - mas também não deve ser muito diferente em outras ferramentas. Clique com o botão direito do mouse na tabela desejada e escolha Alter table
no menu de contexto. Na parte inferior, você pode ver todas as opções disponíveis para alterar uma tabela. Escolha Options
e você receberá este formulário:
Em seguida, basta definir o valor desejado no campo, Auto increment
como mostrado na imagem. Basicamente, isso executará a consulta mostrada na primeira opção.
Para atualizar o mais recente mais um ID
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
ALTER TABLE nome da tabela AUTO_INCREMENT = 1
Pesquisei no Google e encontrei essa pergunta, mas a resposta que estou procurando realmente preenche dois critérios:
Como não consegui encontrar exatamente o que quero aqui, juntei a resposta de várias respostas e a compartilhei aqui.
Algumas coisas a serem observadas:
id
com o tipo como int
chave primáriacrie um procedimento armazenado como este:
DELIMITER //
CREATE PROCEDURE reset_autoincrement(IN tablename varchar(200))
BEGIN
SET @get_next_inc = CONCAT('SELECT @next_inc := max(id) + 1 FROM ',tablename,';');
PREPARE stmt FROM @get_next_inc;
EXECUTE stmt;
SELECT @next_inc AS result;
DEALLOCATE PREPARE stmt;
set @alter_statement = concat('ALTER TABLE ', tablename, ' AUTO_INCREMENT = ', @next_inc, ';');
PREPARE stmt FROM @alter_statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
Então execute.
Antes da execução, fica assim quando você olha em Procedimentos armazenados no seu banco de dados.
Quando executo, basta selecionar o procedimento armazenado e pressionar Executar seleção
Nota: a parte dos delimitadores é crucial. Portanto, se você copiar e colar das principais respostas selecionadas nesta pergunta, elas tendem a não funcionar por esse motivo.
Depois de executar, devo ver o procedimento armazenado
Se você precisar alterar o procedimento armazenado, exclua o procedimento armazenado e selecione para executar novamente.
Desta vez, você pode simplesmente usar consultas normais do MySQL.
call reset_autoincrement('products');
Originalmente, a partir das minhas próprias consultas SQL, observe em https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc e adaptado para StackOverflow
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Tente executar esta consulta
ALTER TABLE tablename AUTO_INCREMENT = value;
Ou tente esta consulta para o incremento automático de redefinição
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;
E defina o incremento automático e execute esta consulta
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
Sugiro que você vá ao Query Browser e faça o seguinte:
O incremento automático deve ser redefinido para um assim que você inserir uma nova linha na tabela.
Não sei o que acontecerá se você tentar adicionar uma linha em que já exista um valor de campo auto_increment.
Espero que esta ajuda!
A melhor maneira é remover o campo com AI e adicioná-lo novamente com AI, funciona para todas as tabelas