You can change this option with ALTER TABLE, but in that case the new value must be higher than the highest value which is present in the AUTO_INCREMENT column.Fonte @VasiliiSuricov Se não houver um valor maior do que o que você deseja definir na auto_incrementcoluna ed, você também poderá diminuir o valor. ( mysql documentation )
seyfahni
Respostas:
520
Você pode usar ALTER TABLEpara alterar o valor inicial de incremento automático:
O MySQL 5.6 tinha um bug que não permitia diminuir o AUTO_INCREMENTvalor, mas foi corrigido nas versões 5.6.16 e 5.7.4, veja bugs.mysql.com/bug.php?id=69882
Daniel Vandersluis
3
Dê uma olhada no aviso da cosimo sobre a reconstrução da mesa se você fizer isso!
precisa saber é o seguinte
15
Para esclarecer: Definir o valor inicial para 5, significa que a próxima inserção será 5.
Steen Schütt
97
Sim, você pode usar a ALTER TABLE t AUTO_INCREMENT = 42declaração No entanto, você precisa estar ciente de que isso causará a reconstrução de toda a sua tabela, pelo menos com o InnoDB e algumas versões do MySQL. Se você já possui um conjunto de dados com milhões de linhas, pode levar muito tempo para concluir .
Na minha experiência, é melhor fazer o seguinte:
BEGIN WORK;-- You may also need to add other mandatory columns and valuesINSERTINTO t (id)VALUES(42);ROLLBACK;
Dessa forma, mesmo se você estiver revertendo a transação, o MySQL manterá o valor de incremento automático e a alteração será aplicada instantaneamente.
Você pode verificar isso emitindo uma SHOW CREATE TABLE tdeclaração. Você deveria ver:
> SHOW CREATETABLE t \G
***************************1.row***************************Table: t
CreateTable:CREATETABLE`t`(...) ENGINE=InnoDB AUTO_INCREMENT=43...
OBRIGADO! SET foreign_key_checks = 0;também é útil para isso.
dnozay
Ideia brilhante! Nitpick: SHOW CREATE TABLE trealmente retornará 43, ou seja, o próximo valor após a inserção 42.
Petrkotek 27/05
2
@cosimo, espera, isso não é documentado ? O manual dizia que deveria funcionar dessa maneira? Caso contrário, pode ocorrer uma instalação mysql diferente (futura).
Pacerier
1
@ Pacerier sim, você está correto. Isso depende da maneira como o MySQL funciona atualmente. Pode não funcionar assim no futuro. Dado o histórico do MySQL, eu diria que continuará a funcionar dessa maneira por um longo tempo.
Cosimo
@cosimo, Espero que eles o documentem para que um código confiável possa realmente usar esse bom hack. A partir de agora, o código que deseja ser confiável não pode usar isso.
Pacerier
13
Como incrementar automaticamente um a partir de 10 no MySQL:
createtable foobar(
id INT PRIMARYKEY AUTO_INCREMENT,
moobar VARCHAR(500));ALTERTABLE foobar AUTO_INCREMENT=10;INSERTINTO foobar(moobar)values("abc");INSERTINTO foobar(moobar)values("def");INSERTINTO foobar(moobar)values("xyz");select*from foobar;'10','abc''11','def''12','xyz'
Isso incrementa automaticamente a coluna de identificação em uma começando em 10.
Incremento automático no MySQL em 5, começando em 10:
droptable foobar
createtable foobar(
id INT PRIMARYKEY AUTO_INCREMENT,
moobar VARCHAR(500));SET@@auto_increment_increment=5;ALTERTABLE foobar AUTO_INCREMENT=10;INSERTINTO foobar(moobar)values("abc");INSERTINTO foobar(moobar)values("def");INSERTINTO foobar(moobar)values("xyz");select*from foobar;'11','abc''16','def''21','xyz'
Isso incrementa automaticamente a coluna de identificação em 5 a cada vez, começando em 10.
Você também pode fazer isso usando phpmyadmin. Basta selecionar a tabela e ir para ações. E altere as opções da tabela Incremento automático abaixo. Não se esqueça de clicar em Iniciar
You can change this option with ALTER TABLE, but in that case the new value must be higher than the highest value which is present in the AUTO_INCREMENT column.
Fonte @VasiliiSuricov Se não houver um valor maior do que o que você deseja definir naauto_increment
coluna ed, você também poderá diminuir o valor. ( mysql documentation )Respostas:
Você pode usar
ALTER TABLE
para alterar o valor inicial de incremento automático:Veja a referência do MySQL para mais detalhes.
fonte
AUTO_INCREMENT
valor, mas foi corrigido nas versões 5.6.16 e 5.7.4, veja bugs.mysql.com/bug.php?id=69882Sim, você pode usar a
ALTER TABLE t AUTO_INCREMENT = 42
declaração No entanto, você precisa estar ciente de que isso causará a reconstrução de toda a sua tabela, pelo menos com o InnoDB e algumas versões do MySQL. Se você já possui um conjunto de dados com milhões de linhas, pode levar muito tempo para concluir .Na minha experiência, é melhor fazer o seguinte:
Dessa forma, mesmo se você estiver revertendo a transação, o MySQL manterá o valor de incremento automático e a alteração será aplicada instantaneamente.
Você pode verificar isso emitindo uma
SHOW CREATE TABLE t
declaração. Você deveria ver:fonte
SET foreign_key_checks = 0;
também é útil para isso.SHOW CREATE TABLE t
realmente retornará43
, ou seja, o próximo valor após a inserção42
.Como incrementar automaticamente um a partir de 10 no MySQL:
Isso incrementa automaticamente a coluna de identificação em uma começando em 10.
Incremento automático no MySQL em 5, começando em 10:
Isso incrementa automaticamente a coluna de identificação em 5 a cada vez, começando em 10.
fonte
Procedimento para corrigir automaticamente o valor AUTO_INCREMENT da tabela
fonte
Se você precisar deste procedimento para nomes de campos variáveis em vez
id
disso, pode ser útil:fonte
Você também pode fazer isso usando phpmyadmin. Basta selecionar a tabela e ir para ações. E altere as opções da tabela Incremento automático abaixo. Não se esqueça de clicar em Iniciar
fonte
apenas exporte a tabela com dados .. copie seu sql como
agora altere o valor do incremento automático e execute o sql.
fonte