Jak mogę zresetowaćAUTO_INCREMENT
pola?
Chcę, żeby 1
znów zaczęło odliczać .
TRUNCATE TABLE yourTableName;
Jak mogę zresetowaćAUTO_INCREMENT
pola?
Chcę, żeby 1
znów zaczęło odliczać .
TRUNCATE TABLE yourTableName;
Odpowiedzi:
Możesz zresetować licznik za pomocą:
ALTER TABLE tablename AUTO_INCREMENT = 1
W przypadku InnoDB nie można ustawić auto_increment
wartości niższej lub równej najwyższemu bieżącemu indeksowi. (cytat z ViralPatel ):
Należy pamiętać, że nie można zresetować licznika do wartości mniejszej lub równej żadnej, która została już użyta. W przypadku MyISAM, jeśli wartość jest mniejsza lub równa maksymalnej wartości obecnie w kolumnie AUTO_INCREMENT, wartość jest resetowana do bieżącej wartości maksymalnej plus jeden. W przypadku InnoDB, jeśli wartość jest mniejsza niż bieżąca maksymalna wartość w kolumnie, nie wystąpi błąd i bieżąca wartość sekwencji nie zostanie zmieniona.
Zobacz Jak zresetować autowzrost MySQL przy użyciu wartości MAX z innej tabeli? na temat tego, jak dynamicznie uzyskać akceptowalną wartość.
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;
Myślę, że to zrobi
UPDATE
zaktualizujesz wszystkie wartości w id
kolumnie.
Po prostu tak:
ALTER TABLE tablename AUTO_INCREMENT = value;
odniesienie: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
oznacza ustawienie jej na wartość domyślną ... dzięki czemu można zastąpić „wartość” 1
Jest bardzo łatwy sposób z phpmyadmin w zakładce „operacje”, możesz ustawić, w opcjach tabeli, auto-wzrost do żądanej liczby.
Najlepsze rozwiązanie, które dla mnie zadziałało:
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;
Jest szybki, współpracuje z innoDB i nie muszę znać bieżącej wartości maksymalnej! W ten sposób licznik automatycznego przyrostu zostanie zresetowany i uruchomi się automatycznie od wartości maksymalnej.
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
, podczas ALTER TABLE tablename AUTO_INCREMENT = 1
gdy nie .
Najwyżej ocenione odpowiedzi na to pytanie zalecają „ZMIENIJ swój stół AUTO_INCREMENT = wartość”. Działa to jednak tylko wtedy, gdy value
zmiana jest większa niż bieżąca maksymalna wartość kolumny autowzrostu. Zgodnie z dokumentacją MySQL 8 :
Nie można zresetować licznika do wartości mniejszej lub równej aktualnie używanej wartości. Zarówno w przypadku InnoDB, jak i MyISAM, jeśli wartość jest mniejsza lub równa maksymalnej wartości obecnie w kolumnie AUTO_INCREMENT, wartość jest resetowana do bieżącej maksymalnej wartości kolumny AUTO_INCREMENT plus jeden.
Zasadniczo możesz zmienić AUTO_INCREMENT tylko w celu zwiększenia wartości kolumny autowzrostu, a nie resetować jej do 1, jak OP pyta w drugiej części pytania. Aby uzyskać opcje, które faktycznie pozwalają ustawić AUTO_INCREMENT w dół od jego aktualnego maksimum, spójrz na klucz główny Zmień kolejność / zeruj auto-przyrost .
Dodanie aktualizacji, ponieważ zmieniono funkcjonalność w MySQL 5.6. Począwszy od MySQL 5.6, możesz używać prostego ALTER TABLE z InnoDB:
ALTER TABLE tablename AUTO_INCREMENT = 1;
Dokumenty są aktualizowane, aby odzwierciedlić to:
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
Moje testy pokazują również, że tabela NIE jest kopiowana, wartość jest po prostu zmieniana.
Istnieją dobre opcje podane w artykule Jak zresetować kolumnę Autoinkrementacji MySQL
Należy pamiętać, że ALTER TABLE tablename AUTO_INCREMENT = value;
ma nie pracować dla InnoDB
DELETE
(lub ROLLBACK
) nie odzyska identyfikatorów. Jeden wyjątek: po restarcie (lub awarii) obliczany jest następny identyfikator MAX(id)+1
, dzięki czemu skutecznie odzyskuje usunięte identyfikatory na końcu . Wyjątek od wyjątku: MySQL 8.0 pozostawia te identyfikatory nieużywane.
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
Użyłem tego w niektórych moich skryptach, pole id jest usuwane, a następnie dodawane z poprzednimi ustawieniami, wszystkie istniejące pola w tabeli bazy danych są wypełniane nowymi wartościami automatycznego przyrostu, powinno to również działać z InnoDB.
Pamiętaj, że wszystkie pola w tabeli zostaną przeliczone i będą miały inne identyfikatory !!!
Możesz także użyć TRUNCATE
tabeli składni w następujący sposób:
TRUNCATE TABLE table_name
STRZEC SIĘ!! TRUNCATE TABLE your_table
będzie usunąć wszystko w twoich your_table
!!
TRUNCATE
będzie również usunięcie wszystkich wierszy w określonej tabeli!
TRUNCATE
zresetuje też auto_increment
pola? Moim przypadkiem użycia jest wyczyszczenie starych danych w tabeli i ponowne uruchomienie identyfikatorów od 1 dla nowych danych (wyobraź sobie, wyczyść tabelę do prawidłowego użycia po zakończeniu testowania). Pomyślałem, że będę musiał DROP
cały stół i CREATE
jeszcze raz.
auto_increment
wartość, użyj DELETE FROM
zamiast TRUNCATE
.
dotyczy pustej tabeli:
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
jeśli masz dane, ale chcesz je uporządkować, polecam użyć tego:
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`);
Oto moje rozwiązanie, ale nie radzę tego robić, jeśli kolumna ma ograniczenia lub jest połączona jako klucz obcy z innymi tabelami, ponieważ miałoby to złe skutki lub nawet nie działałoby.
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
To działa dobrze!
Począwszy od MySQL 5.6, poniższe podejście działa szybciej ze względu na DDL online (uwaga algorithm=inplace
):
alter table tablename auto_increment=1, algorithm=inplace;
Możesz po prostu obciąć tabelę, aby zresetować sekwencję
TRUNCATE TABLE TABLE_NAME
Próbowałem zmienić tabelę i ustawić auto_increment na 1, ale to nie działało. Postanowiłem usunąć nazwę kolumny, którą zwiększałem, a następnie utwórz nową kolumnę z preferowaną nazwą i ustaw nową kolumnę na zwiększenie od początku.
Licznik automatycznego przyrostu dla tabeli można (ponownie) ustawić na dwa sposoby:
Wykonując zapytanie, podobnie jak inni już wyjaśnili:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Korzystanie z Workbench lub innego wizualnego narzędzia do projektowania baz danych. Pokażę w Workbench, jak to się robi - ale w innych narzędziach też nie powinno być inaczej. Kliknij prawym przyciskiem myszy żądaną tabelę i wybierz Alter table
z menu kontekstowego. Na dole możesz zobaczyć wszystkie dostępne opcje zmiany tabeli. Wybierz, Options
a otrzymasz ten formularz:
Następnie ustaw żądaną wartość w polu, Auto increment
jak pokazano na obrazku. Spowoduje to w zasadzie wykonanie zapytania pokazanego w pierwszej opcji.
Aby zaktualizować najnowszy plus jeden identyfikator
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
ALTER TABLE tablename AUTO_INCREMENT = 1
Poszukałem go i znalazłem to pytanie, ale odpowiedź, której tak naprawdę szukam, spełnia dwa kryteria:
Ponieważ nie mogłem znaleźć dokładnie tego, czego chcę tutaj, wybrałem odpowiedź z różnych odpowiedzi i udostępniłem ją tutaj.
Kilka rzeczy do zapamiętania:
id
z typem asint
kluczem podstawowymUtwórz procedurę składowaną w następujący sposób:
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 ;
Następnie uruchom.
Przed uruchomieniem wygląda to tak, gdy zajrzysz do Procedur składowanych w bazie danych.
Kiedy uruchamiam, po prostu wybieram procedurę przechowywaną i wciskam Uruchom zaznaczenie
Uwaga: część ograniczników ma kluczowe znaczenie. Dlatego jeśli skopiujesz i wkleisz z najlepszych odpowiedzi w tym pytaniu, zwykle nie działają one z tego powodu.
Po uruchomieniu powinienem zobaczyć procedurę przechowywaną
Jeśli chcesz zmienić procedurę przechowywaną, musisz usunąć procedurę przechowywaną, a następnie wybierz opcję ponownego uruchomienia.
Tym razem możesz po prostu użyć zwykłych zapytań MySQL.
call reset_autoincrement('products');
Pierwotnie z własnych notatek dotyczących zapytań SQL w https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc i przystosowanych do StackOverflow
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Spróbuj uruchomić to zapytanie
ALTER TABLE tablename AUTO_INCREMENT = value;
Lub wypróbuj to zapytanie, aby zresetować automatyczny przyrost
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;
I ustaw automatyczny przyrost, a następnie uruchom to zapytanie
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
Sugeruję, aby przejść do przeglądarki zapytań i wykonać następujące czynności:
Auto_increment powinno zostać zresetowane do jednego po wprowadzeniu nowego wiersza w tabeli.
Nie wiem, co się stanie, jeśli spróbujesz dodać wiersz, w którym już istnieje wartość pola auto_increment.
Mam nadzieję, że to pomoże!
Najlepszym sposobem jest usunięcie pola za pomocą AI i dodanie go ponownie za pomocą AI, działa dla wszystkich tabel