Jak zresetować AUTO INCREMENT w MySQL?
Jak mogę reset AUTO_INCREMENT
pola? Chcę, żeby znowu zaczęła liczyć od 1
.
21 answers
Możesz zresetować licznik za pomocą:
ALTER TABLE tablename AUTO_INCREMENT = 1
Dla InnoDB nie można ustawić wartości auto_increment
niższej lub równej Najwyższemu bieżącemu indeksowi. (cytat z ViralPatel):
Pamiętaj, że nie możesz zresetować licznika do wartości mniejszej lub równej do wszystkich, które zostały już wykorzystane. Dla MyISAM, jeśli wartość jest mniejsza niż lub równa maksymalnej wartości aktualnie w AUTO_INCREMENT kolumna, wartość jest resetowana do bieżącego maksimum plus jeden. Na InnoDB, jeżeli wartość jest mniej niż aktualna wartość maksymalna w kolumna, nie występuje błąd i bieżąca wartość sekwencji nie jest zmieniana.
Zobacz Jak zresetować Autoinkrement MySQL używając maksymalnej wartości z innej tabeli? jak dynamicznie uzyskać akceptowalną wartość.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:29
ALTER TABLE tablename AUTO_INCREMENT = 1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-04 19:55:11
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Myślę, że to da radę
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-04 16:21:44
Po prostu tak:
ALTER TABLE tablename AUTO_INCREMENT = value;
Odniesienie: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-19 08:40:20
Jest bardzo łatwy sposób z phpmyadmin w zakładce "operacje" , możesz ustawić w opcjach tabeli autoincrement na żądany numer.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-03 20:20:22
Najlepsze rozwiązanie, które zadziałało dla mnie:
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, działa z innoDB, i nie muszę znać aktualnej maksymalnej wartości! W ten sposób licznik automatycznego przyrostu zostanie zresetowany i rozpocznie się automatycznie od maksymalnej wartości.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-16 22:39:25
Są dobre opcje podane w Jak zresetować kolumnę AutoIncrement MySQL
Zauważ, że ALTER TABLE tablename AUTO_INCREMENT = value;
Czy nie działa dla InnoDB
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-24 12:36:53
Najwyżej oceniane odpowiedzi na to pytanie polecają "ALTER yourtable AUTO_INCREMENT= value". Jednak działa to tylko wtedy, gdy value
w alter jest większa niż bieżąca wartość maksymalna kolumny autoincrement. zgodnie z dokumentacją MySQL :
Nie można zresetować licznika do wartości mniejszej lub równej zostały już wykorzystane. Dla MyISAM, jeżeli wartość jest mniejsza lub równa do maksymalnej wartości aktualnie w AUTO_INCREMENT kolumna, wartość jest resetowany do aktualnego maksimum plus jeden. Dla InnoDB można użyć ALTER TABLE ... AUTO_INCREMENT = wartość od MySQL 5.0.3, ale jeśli wartość jest mniejsza od bieżącej wartości maksymalnej w kolumnie, brak błędu występuje i bieżąca wartość sekwencji nie jest zmieniana.
Zasadniczo, można zmienić AUTO_INCREMENT tylko w celu zwiększenia wartości kolumny autoincrement, a nie resetować ją do 1, Jak prosi OP w drugiej części pytania. Dla opcji, które faktycznie pozwala ustawić AUTO_INCREMENT w dół od aktualnego max, spójrz na Reorder / reset Auto increment primary key.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:10
Dodanie aktualizacji, ponieważ funkcjonalność zmieniła się w MySQL 5.6. Od MySQL 5.6 można używać prostej tabeli ALTER 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 zmieniona.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-25 19:28:11
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 skryptach, pole id jest upuszczane, a następnie dodawane z powrotem z poprzednimi ustawieniami, wszystkie istniejące pola w tabeli bazy danych są wypełnione nowymi wartościami auto increment , powinno to również działać z InnoDB .
Zauważ, że wszystkie pola w tabeli zostaną przeliczone i będą miały inne identyfikatory !!!.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-01 05:45:41
Możesz również użyć tabeli składni TRUNCATE
w następujący sposób :
TRUNCATE TABLE table_name
uważaj!! TRUNCATE TABLE your_table
czy usuniesz wszystko w twoim your_table
!!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-13 11:27:55
Jest dla 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`);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-05 06:51:03
Oto moje rozwiązanie, ale nie radzę tego robić, jeśli twoja kolumna ma ograniczenia lub jest podłączona jako klucz obcy do innych tabel, ponieważ miałoby to złe skutki lub nawet nie zadziała.
> Pierwszy: upuść kolumnę
ALTER TABLE tbl_name DROP COLUMN column_id
> drugi: odtworzyć kolumnę i ustawić ją jako pierwszą, jeśli chcesz ją jako pierwszą kolumnę zakładam.
ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST
To działa dobrze!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-26 13:51:43
Możesz po prostu obciąć tabelę, aby zresetować sekwencję
TRUNCATE TABLE TABLE_NAME
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-20 10:46:54
Licznik auto increment dla tabeli może być (ponownie)ustawiony na dwa sposoby:
-
Wykonując zapytanie, tak jak inne już wyjaśnione:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
-
Za pomocą Workbencha lub innego wizualnego narzędzia do projektowania baz danych. Pokażę w Workbenchu, jak to się robi - ale w innych narzędziach też nie powinno być inaczej. Klikając prawym przyciskiem myszy na żądaną tabelę i wybierając
Alter table
z menu kontekstowego. Na dole możesz zobaczyć wszystkie dostępne opcje zmiany a stolik. WybierzOptions
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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-06 11:52:13
Próbowałem zmienić tabelę i ustawić auto_increment na 1, ale nie zadziałało. Zdecydowałem się usunąć nazwę kolumny, którą zwiększałem, a następnie utworzyć nową kolumnę o preferowanej nazwie i ustawić tę nową kolumnę od początku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-06 10:08:35
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);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-11 12:31:10
ALTER TABLE tablename AUTO_INCREMENT = 1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-21 10:30:13
Wyszukałem w googlach i znalazłem to pytanie, ale odpowiedź, której naprawdę Szukam, spełnia dwa kryteria:
- Korzystanie wyłącznie z zapytań MySQL
- reset istniejącej tabeli auto-inkrement do max (id) + 1
Ponieważ nie mogłem znaleźć dokładnie tego, czego chcę, zebrałem odpowiedź z różnych odpowiedzi i podzieliłem się nią tutaj.
Kilka rzeczy do odnotowania:
- omawiana tabela To InnoDB
- tabela używa pola
id
z typem asint
jako podstawowym klucz - jedynym sposobem, aby to zrobić wyłącznie w MySQL jest użycie procedury składowanej
- moje zdjęcia poniżej używają SequelPro jako GUI. Powinieneś być w stanie dostosować go w oparciu o preferowany edytor MySQL
- przetestowałem to na MySQL Ver 14.14 Distrib 5.5.61, Dla debian-linux-gnu
Krok 1: Utwórz Procedurę Składowaną
Utwó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 go.
Przed biegiem, wygląda tak, gdy patrzysz pod Procedury przechowywane w Twojej bazie danych.
Kiedy uruchamiam, po prostu zaznaczam procedurę składowaną i naciskam Run Selection
Uwaga: ograniczniki są kluczowe. Stąd jeśli skopiujesz i wkleisz z góry wybrane odpowiedzi w tym pytaniu, zwykle nie działają z tego powodu.
Po uruchomieniu, powinienem zobaczyć procedurę składowaną
Jeśli chcesz zmienić procedurę składowaną, musisz aby usunąć procedurę składowaną, Wybierz, aby uruchomić ponownie.
Krok 2: wywołanie procedury składowanej
Tym razem możesz po prostu użyć zwykłych zapytań MySQL.
call reset_autoincrement('products');
Pochodzi z moich własnych notatek zapytań SQL w https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc i przystosowany do StackOverflow
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 04:44:06
Najlepszym sposobem jest usunięcie pola za pomocą AI i dodanie go ponownie za pomocą AI, Działa dla wszystkich tabel
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-03 13:17:05
Proponuję przejść do przeglądarki zapytań i wykonać następujące czynności:
- Przejdź do schematu i znajdź tabelę, którą chcesz zmienić.
- Kliknij prawym przyciskiem myszy i wybierz polecenie Kopiuj Utwórz.
- Otwórz zakładkę result i wklej instrukcję create their.
- Przejdź do ostatniej linii instrukcji create i poszukaj AUTO_INCREMENT=N, (Gdzie N jest liczbą bieżącą dla pola auto_increment.)
- Zastąp N przez 1.
- prasa ctrl+enter.
Auto_increment powinien zostać zresetowany po wprowadzeniu nowego wiersza w tabeli.
Nie wiem, co się stanie, jeśli spróbujesz dodać wiersz, w którym wartość pola auto_increment już istnieje.
Mam nadzieję, że to pomoże!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-24 12:39:19