@VasiliiSuricov 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.źródło Jeśli nie ma wyższej wartości niż to, co chcesz ustawić auto_incrementkolumnę ed, możesz również zmniejszyć wartość. ( dokumentacja mysql )
seyfahni
Odpowiedzi:
520
Możesz użyć ALTER TABLEdo zmiany początkowej wartości auto_increment:
ALTERTABLE tbl AUTO_INCREMENT =5;
Więcej informacji znajduje się w dokumentacji MySQL .
W MySQL 5.6 występował błąd, który nie pozwalał na zmniejszenie AUTO_INCREMENTwartości, ale został on naprawiony w 5.6.16 i 5.7.4, patrz bugs.mysql.com/bug.php?id=69882
Daniel Vandersluis
3
Spójrz na ostrzeżenie cosimo o przebudowywaniu stołu, jeśli to zrobisz!
h00ligan,
15
Wyjaśnienie: Ustawienie wartości początkowej na 5 oznacza, że następna wstawka będzie miała wartość 5.
Steen Schütt
97
Tak, możesz użyć ALTER TABLE t AUTO_INCREMENT = 42oświadczenia. Należy jednak pamiętać, że spowoduje to przebudowę całej tabeli, przynajmniej w przypadku InnoDB i niektórych wersji MySQL. Jeśli masz już zbiór danych z milionami wierszy, jego ukończenie może zająć bardzo dużo czasu .
Z mojego doświadczenia wynika, że lepiej wykonać następujące czynności:
BEGIN WORK;-- You may also need to add other mandatory columns and valuesINSERTINTO t (id)VALUES(42);ROLLBACK;
W ten sposób, nawet jeśli wycofujesz transakcję, MySQL zachowa wartość automatycznego przyrostu, a zmiana zostanie zastosowana natychmiast.
Możesz to zweryfikować, wydając SHOW CREATE TABLE toświadczenie. Powinieneś zobaczyć:
> SHOW CREATETABLE t \G
***************************1.row***************************Table: t
CreateTable:CREATETABLE`t`(...) ENGINE=InnoDB AUTO_INCREMENT=43...
DZIĘKI! SET foreign_key_checks = 0;jest również przydatny do tego.
dnozay
Genialny pomysł! Nitpick: SHOW CREATE TABLE tfaktycznie powróci 43, tj. Następna wartość po wstawieniu 42.
petrkotek
2
@cosimo, czekaj, nie jest to nieudokumentowane ? Czy instrukcja mówi, że tak powinno działać? Jeśli nie, może się zepsuć w innej (przyszłej) konfiguracji mysql.
Pacerier
1
@Pacerier tak, masz rację. Zależy to od sposobu, w jaki obecnie działa MySQL. W przyszłości może tak nie działać. Biorąc pod uwagę historię MySQL, zakładam, że tak będzie działać przez długi czas.
Cosimo,
@cosimo, mam nadzieję, że udokumentują to, aby niezawodny kod mógł faktycznie wykorzystać ten dobry hack. Na razie kod, który chce być niezawodny, nie może tego używać.
Pacerier
13
Jak automatycznie zwiększać o jeden, zaczynając od 10 w 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'
To auto zwiększa kolumnę id o jedną, zaczynając od 10.
Automatyczny przyrost w MySQL o 5, zaczynając od 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'
To auto zwiększa kolumnę id o 5 za każdym razem, zaczynając od 10.
Możesz to również zrobić za pomocą phpmyadmin. Po prostu wybierz tabelę i przejdź do akcji. I zmień Auto-przyrost poniżej opcji tabeli. Nie zapomnij kliknąć Start
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.
źródło Jeśli nie ma wyższej wartości niż to, co chcesz ustawićauto_increment
kolumnę ed, możesz również zmniejszyć wartość. ( dokumentacja mysql )Odpowiedzi:
Możesz użyć
ALTER TABLE
do zmiany początkowej wartości auto_increment:Więcej informacji znajduje się w dokumentacji MySQL .
źródło
AUTO_INCREMENT
wartości, ale został on naprawiony w 5.6.16 i 5.7.4, patrz bugs.mysql.com/bug.php?id=69882Tak, możesz użyć
ALTER TABLE t AUTO_INCREMENT = 42
oświadczenia. Należy jednak pamiętać, że spowoduje to przebudowę całej tabeli, przynajmniej w przypadku InnoDB i niektórych wersji MySQL. Jeśli masz już zbiór danych z milionami wierszy, jego ukończenie może zająć bardzo dużo czasu .Z mojego doświadczenia wynika, że lepiej wykonać następujące czynności:
W ten sposób, nawet jeśli wycofujesz transakcję, MySQL zachowa wartość automatycznego przyrostu, a zmiana zostanie zastosowana natychmiast.
Możesz to zweryfikować, wydając
SHOW CREATE TABLE t
oświadczenie. Powinieneś zobaczyć:źródło
SET foreign_key_checks = 0;
jest również przydatny do tego.SHOW CREATE TABLE t
faktycznie powróci43
, tj. Następna wartość po wstawieniu42
.Jak automatycznie zwiększać o jeden, zaczynając od 10 w MySQL:
To auto zwiększa kolumnę id o jedną, zaczynając od 10.
Automatyczny przyrost w MySQL o 5, zaczynając od 10:
To auto zwiększa kolumnę id o 5 za każdym razem, zaczynając od 10.
źródło
Procedura automatycznej naprawy wartości AUTO_INCREMENT tabeli
źródło
Jeśli potrzebujesz tej procedury dla zmiennych nazw pól zamiast
id
tego, może to być pomocne:źródło
Możesz to również zrobić za pomocą phpmyadmin. Po prostu wybierz tabelę i przejdź do akcji. I zmień Auto-przyrost poniżej opcji tabeli. Nie zapomnij kliknąć Start
źródło
po prostu wyeksportuj tabelę z danymi .., a następnie skopiuj jej sql jak
teraz zmień wartość automatycznego przyrostu i uruchom sql.
źródło