Jak zresetować AUTO INCREMENT w MySQL?

Jak mogę reset AUTO_INCREMENT pola? Chcę, żeby znowu zaczęła liczyć od 1.

Author: DineshDB, 2012-01-19

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ść.

 1697
Author: Niels,
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
 124
Author: boobiq,
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ę

 54
Author: tronghiep92,
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

 52
Author: fyr,
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

Tutaj wpisz opis obrazkaJest bardzo łatwy sposób z phpmyadmin w zakładce "operacje" , możesz ustawić w opcjach tabeli autoincrement na żądany numer.

 37
Author: Miles M.,
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.

 29
Author: trust_words,
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

 20
Author: Naz,
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.

 16
Author: lreeder,
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.

 16
Author: SeanN,
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 !!!.

 12
Author: Alin Razvan,
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!!

 9
Author: Manohar Kumar,
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`);
 4
Author: Abdul Aziz Al Basyir,
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!
 3
Author: bdalina,
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
 1
Author: Kunwar Babu,
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:

  1. Wykonując zapytanie, tak jak inne już wyjaśnione:

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

  2. 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. Wybierz Options a otrzymasz ten formularz: Tutaj wpisz opis obrazka

    Następnie ustaw żądaną wartość w polu Auto increment, Jak pokazano na obrazku. Spowoduje to w zasadzie wykonanie zapytania pokazanego w pierwszej opcji.

 1
Author: Kristijan Iliev,
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.

 0
Author: andromeda,
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);
 0
Author: narasimharaosp,
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

 0
Author: santosh mahule,
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:

  1. Korzystanie wyłącznie z zapytań MySQL
  2. 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:

  1. omawiana tabela To InnoDB
  2. tabela używa pola id z typem as int jako podstawowym klucz
  3. jedynym sposobem, aby to zrobić wyłącznie w MySQL jest użycie procedury składowanej
  4. moje zdjęcia poniżej używają SequelPro jako GUI. Powinieneś być w stanie dostosować go w oparciu o preferowany edytor MySQL
  5. 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.

Tutaj wpisz opis obrazka

Kiedy uruchamiam, po prostu zaznaczam procedurę składowaną i naciskam Run Selection

Tutaj wpisz opis obrazka

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ą

Tutaj wpisz opis obrazka

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

 0
Author: Kim Stacks,
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

 -1
Author: Grumpy,
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:

  1. Przejdź do schematu i znajdź tabelę, którą chcesz zmienić.
  2. Kliknij prawym przyciskiem myszy i wybierz polecenie Kopiuj Utwórz.
  3. Otwórz zakładkę result i wklej instrukcję create their.
  4. Przejdź do ostatniej linii instrukcji create i poszukaj AUTO_INCREMENT=N, (Gdzie N jest liczbą bieżącą dla pola auto_increment.)
  5. Zastąp N przez 1.
  6. 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!

 -2
Author: jeson,
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