it-swarm.com.de

Wie setze ich AUTO_INCREMENT in MySQL zurück?

Wie kann ich zurücksetzen den AUTO_INCREMENT eines Feldes? Ich möchte, dass es wieder ab 1 zählt.

1132
some Folk

Sie können den Zähler zurücksetzen mit:

ALTER TABLE tablename AUTO_INCREMENT = 1

Für InnoDB können Sie den Wert auto_increment nicht auf den höchsten aktuellen Index setzen. (Zitat aus ViralPatel ):

Beachten Sie, dass Sie den Zähler nicht auf einen Wert zurücksetzen können, der kleiner oder gleich dem Wert ist, der bereits verwendet wurde. Wenn der Wert für MyISAM kleiner oder gleich dem Maximalwert ist, der derzeit in der Spalte AUTO_INCREMENT enthalten ist, wird der Wert auf das aktuelle Maximum plus eins zurückgesetzt. Wenn der Wert in InnoDB kleiner als der aktuelle Maximalwert in der Spalte ist, tritt kein Fehler auf und der aktuelle Sequenzwert wird nicht geändert.

Siehe So setzen Sie ein MySQL AutoIncrement mit einem MAX-Wert aus einer anderen Tabelle zurück? zum dynamischen Abrufen eines akzeptablen Werts.

1851
Niels
ALTER TABLE tablename AUTO_INCREMENT = 1
145
boobiq
SET  @num := 0;

UPDATE your_table SET id = @num := (@num+1);

ALTER TABLE your_table AUTO_INCREMENT =1;

Ich denke, das wird es schaffen

68
nghiepit

Einfach so:

ALTER TABLE tablename AUTO_INCREMENT = value;

referenz: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

54
fyr

enter image description hereEs gibt eine sehr einfache Möglichkeit, mit phpmyadmin auf der Registerkarte "Operationen" die automatische Inkrementierung der gewünschten Nummer in den Tabellenoptionen festzulegen.

38
Miles M.

Die beste Lösung, die für mich funktioniert hat:

ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;

Es ist schnell, funktioniert mit innoDB und ich muss den aktuellen Maximalwert nicht kennen! Auf diese Weise wird der Auto-Inkrement-Zähler zurückgesetzt und startet automatisch ab dem Maximalwert, der vorhanden ist.

32
trust_words

Die am besten bewerteten Antworten auf diese Frage empfehlen alle "ALTER yourtable AUTO_INCREMENT = value". Dies funktioniert jedoch nur, wenn value in der Änderung größer ist als der aktuelle Maximalwert der Spalte "Autoincrement". Gemäß der MySQL 8-Dokumentation :

Sie können den Zähler nicht auf einen Wert zurücksetzen, der kleiner oder gleich dem aktuell verwendeten Wert ist. Wenn sowohl für InnoDB als auch für MyISAM der Wert kleiner oder gleich dem Maximalwert in der Spalte AUTO_INCREMENT ist, wird der Wert auf den aktuellen Maximalwert der Spalte AUTO_INCREMENT plus eins zurückgesetzt.

Im Wesentlichen können Sie AUTO_INCREMENT nur ändern, um den Wert der Autoincrement-Spalte zu erhöhen, nicht um ihn auf 1 zurückzusetzen, wie das OP im zweiten Teil der Frage fragt. Informationen zu Optionen, mit denen Sie AUTO_INCREMENT von seinem aktuellen Maximum nach unten einstellen können, finden Sie unter Neuanordnen/Zurücksetzen des automatischen Inkrement-Primärschlüssels .

19
lreeder

Es gibt gute Optionen in So setzen Sie die MySQL Autoincrement-Spalte zurück

Beachten Sie, dass ALTER TABLE tablename AUTO_INCREMENT = value; für InnoDB nicht funktioniert

19
Naz

Hinzufügen eines Updates, da sich die Funktionalität in MySQL 5.6 geändert hat. Ab MySQL 5.6 können Sie die einfache ALTER TABLE mit InnoDB verwenden:

ALTER TABLE tablename AUTO_INCREMENT = 1;

Die Dokumente werden entsprechend aktualisiert:

http://dev.mysql.com/doc/refman/5.6/en/alter-table.html

Mein Test zeigt auch, dass die Tabelle NICHT kopiert wird, der Wert wird einfach geändert.

18
SeanN
ALTER TABLE news_feed DROP id

ALTER TABLE news_feed ADD  id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)

Ich habe dies in einigen meiner Skripte verwendet. Das ID-Feld wird gelöscht und dann mit den vorherigen Einstellungen wieder hinzugefügt. Alle vorhandenen Felder in der Datenbanktabelle werden mit neuen Auto-Inkrement-Werten ausgefüllt. Dies sollte auch mit InnoDB funktionieren.

Beachten Sie, dass alle Felder in der Tabelle neu gezählt werden und andere IDs haben !!!.

12
Alin Razvan

Sie können auch die Syntaxtabelle TRUNCATE wie folgt verwenden: TRUNCATE TABLE table_name

ACHTUNG !! TRUNCATE TABLE your_table wird alles löschen in deinem your_table !!

11
Manohar Kumar

es ist für leere Tabelle:

ALTER TABLE `table_name` AUTO_INCREMENT = 1;

wenn Sie Daten haben, diese aber aufräumen möchten, empfehle ich Folgendes:

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`);

Hier ist meine Lösung, aber ich rate nicht dazu, wenn Ihre Spalte Einschränkungen aufweist oder als Fremdschlüssel mit anderen Tabellen verbunden ist, da dies negative Auswirkungen hätte oder nicht funktioniert.

> Zuerst: Lassen Sie die Spalte fallen

ALTER TABLE tbl_name DROP COLUMN column_id

> Zweitens: Erstellen Sie die Spalte neu und legen Sie sie als ERSTE fest, wenn Sie sie als erste Spalte annehmen möchten.

ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST

Das funktioniert gut!

4
bdalina

Sie können die Tabelle einfach abschneiden, um die Sequenz zurückzusetzen

TRUNCATE TABLE TABLE_NAME
1
Kunwar Babu

Ich habe versucht, die Tabelle zu ändern und auto_increment auf 1 zu setzen, aber es hat nicht funktioniert. Ich habe beschlossen, den von mir inkrementierten Spaltennamen zu löschen, dann eine neue Spalte mit Ihrem bevorzugten Namen zu erstellen und diese neue Spalte von Anfang an inkrementieren zu lassen.

1
andromeda

Der Auto-Inkrement-Zähler für eine Tabelle kann auf zwei Arten (neu) eingestellt werden:

  1. Durch Ausführen einer Abfrage, wie andere bereits erklärt haben:

    ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;

  2. Verwenden der Workbench oder eines anderen visuellen Datenbankentwurfstools. Ich werde in Workbench zeigen, wie es gemacht wird - aber es sollte auch in anderen Tools nicht viel anders sein. Klicken Sie mit der rechten Maustaste auf die gewünschte Tabelle und wählen Sie im Kontextmenü Alter table. Unten sehen Sie alle verfügbaren Optionen zum Ändern einer Tabelle. Wählen Sie Options und Sie erhalten folgendes Formular: enter image description here

    Stellen Sie dann einfach den gewünschten Wert in das Feld Auto increment ein, wie in der Abbildung gezeigt. Dadurch wird im Grunde die in der ersten Option gezeigte Abfrage ausgeführt.

1
Kristijan Iliev

Ab MySQL 5.6 funktioniert der folgende Ansatz aufgrund von Online-DDL (Anmerkung algorithm=inplace) schneller:

alter table tablename auto_increment=1, algorithm=inplace;

1
artsafin

Versuchen Sie, diese Abfrage auszuführen

 ALTER TABLE tablename AUTO_INCREMENT = value;

Oder versuchen Sie diese Abfrage für das automatische Inkrement zurücksetzen

 ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;

Und Auto Increment einstellen und dann diese Abfrage ausführen

  ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
0
Shabeer Sha

ALTER TABLE Tabellenname AUTO_INCREMENT = 1

0
santosh mahule

Ich habe gegoogelt und diese Frage gefunden, aber die Antwort, die ich wirklich suche, erfüllt zwei Kriterien:

  1. mit rein MySQL-Abfragen
  2. setzt eine vorhandene automatische Inkrementierung der Tabelle auf max (id) + 1 zurück

Da ich hier nicht genau das finden konnte, was ich will, habe ich die Antwort aus verschiedenen Antworten zusammengestellt und hier geteilt.

Einige Dinge zu beachten:

  1. die fragliche Tabelle ist InnoDB
  2. in der Tabelle wird das Feld id mit dem Typ int als Primärschlüssel verwendet
  3. die einzige Möglichkeit, dies in MySQL zu tun, ist die Verwendung einer gespeicherten Prozedur
  4. meine Bilder unten verwenden SequelPro als GUI. Sie sollten es basierend auf Ihrem bevorzugten MySQL-Editor anpassen können
  5. Ich habe dies auf MySQL Ver 14.14 Distrib 5.5.61 für debian-linux-gnu getestet

Schritt 1: Erstellen einer gespeicherten Prozedur

erstellen Sie eine gespeicherte Prozedur wie folgt:

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 ;

Führen Sie es dann aus.

Vor dem Ausführen sieht es so aus, wenn Sie in Ihrer Datenbank unter Gespeicherte Prozeduren nachsehen.

enter image description here

Beim Ausführen wähle ich einfach die gespeicherte Prozedur aus und drücke auf Auswahl ausführen

enter image description here

Hinweis: Die Begrenzungszeichen sind von entscheidender Bedeutung. Wenn Sie also die in dieser Frage oben ausgewählten Antworten kopieren und einfügen, funktionieren sie aus diesem Grund in der Regel nicht.

Nachdem ich ausgeführt habe, sollte die gespeicherte Prozedur angezeigt werden

enter image description here

Wenn Sie die gespeicherte Prozedur ändern müssen, müssen Sie die gespeicherte Prozedur löschen und dann erneut ausführen.

Schritt 2: Rufen Sie die gespeicherte Prozedur auf

Dieses Mal können Sie einfach normale MySQL-Abfragen verwenden.

call reset_autoincrement('products');

Ursprünglich aus meinen eigenen SQL-Abfragen Notizen in https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc und angepasst für StackOverflow

0
Kim Stacks
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
0
Mihai Galan

Um die neueste plus eine ID zu aktualisieren

 ALTER TABLE table_name AUTO_INCREMENT = 
 (SELECT (id+1) id FROM table_name order by id desc limit 1);
0
narasimharaosp