Auto-Increment-ID zu vorhandener Tabelle hinzufügen?


82

Ich habe eine bereits vorhandene Tabelle, die 'fname', 'lname', 'email', 'password' und 'ip' enthält. Aber jetzt möchte ich eine automatische Inkrementierungsspalte. Wenn ich jedoch eintrete:

ALTER TABLE users
ADD id int NOT NULL AUTO_INCREMENT

Ich bekomme folgendes:

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

Irgendein Rat?:)


Können Sie Ihre vorhandene Tabellendefinition veröffentlichen?
Taryn

Bitte posten Sie die Ausgabe vondescribe users
DKSan

habe das versucht, aber es gibt nur die Tabelle zurück. was brauchst du?
Charles Jenkins

@ CharlesJenkins Könnten Sie die richtige Antwort auswählen?
Wadih M.

MODIFY kann auch verwendet werden als: ALTER TABLE Benutzer MODIFY id int NOT NULL AUTO_INCREMENT; / * AUG vom 2019 * /
Vilas Joshi

Antworten:


131

Versuche dies

ALTER TABLE `users` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY

12
# 1068 - Mehrere Primärschlüssel definiert
Charles Jenkins

6
In SQL Server 2008 hat es für mich funktioniert, 'AUTO_INCREMENT' durch 'IDENTITY (1,1)' zu ersetzen.
Greg A

13
Beachten Sie, dass dadurch eine ID-Spalte als letzte Spalte in der Tabelle hinzugefügt wird. Fügen Sie FIRSTder Abfrage hinzu, um sie zur ersten in dieser Tabelle zu machen.
Tobias Baumeister

5
@ CharlesJenkins Um den Fehler "Mehrere Primärschlüssel" zu vermeiden, löschen Sie den vorhandenen Primärschlüssel, bevor Sie den neuen definieren:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Sean the Bean

6
Um es zur ersten Spalte zu machen, verwenden Sie FIRSTzBALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST
Tahir Raza

72

Wenn es Ihnen egal ist, ob die Auto-ID als verwendet wird PRIMARY KEY, können Sie dies einfach tun

ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST;

Ich habe das gerade gemacht und es hat gut geklappt.


1
Dies hat bei mir funktioniert und die Spalte auto_increment id als Primärschlüssel festgelegt.
Reflexiv

3
Was FIRSTmachen die dort?
Cees Timmerman

12
@Cees Timmerman: Das Schlüsselwort FIRST gibt an, dass die neue Spalte die erste Spalte in der Tabelle ist. Alternativ können Sie eine bestimmte Position mit AFTER existent_col_name angeben. Wenn weder FIRST noch AFTER verwendet werden, wird die neue Spalte nach allen aktuellen Spalten hinzugefügt.
Ruben Ramirez Padron

Was ist, wenn ich einen Index für die ID erstellen möchte, aber keine PK?
Morpheus

@morpheus Dies fügt einen EINZIGARTIGEN Index hinzu, der ein Index für sich ist. Ich mag es nicht, eine Spalte namens id zu haben, die aber keine PK ist.
Arth

34

Wenn Sie AUTO_INCREMENT zu einer vorhandenen Tabelle hinzufügen möchten, müssen Sie den folgenden SQL-Befehl ausführen:

 ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key

1
das hat nicht funktioniert! Erhielt diesen Fehler: # 1068 - Mehrere Primärschlüssel definiert
Charles Jenkins

4
Sie erhalten, Multiple primary key definedweil Sie bereits einen Primärschlüssel auf dem Tisch haben. Eine Tabelle kann nur einen Primärschlüssel haben. Wiederholen Sie den obigen Befehl in der Tabelle, wenn es keinen Primärschlüssel hat
cchi

3
Um den Fehler "Mehrere Primärschlüssel" zu vermeiden, löschen Sie den vorhandenen Primärschlüssel, bevor Sie den neuen definieren:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Sean the Bean

21

Zuerst müssen Sie den Primärschlüssel der Tabelle entfernen

ALTER TABLE nametable DROP PRIMARY KEY

und jetzt können Sie die automatische Erhöhung hinzufügen ...

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

kann nicht fallen, dann ID hinzufügen. Wird bekommenDuplicate column name 'id'
John Joe

1
@ JohnJoe, das liegt daran, dass du bereits die ID-Spalte hast. Versuchen Sie dies: ALTER TABLE nametable DROP PRIMARY KEY, MODIFY COLUMN id INT NICHT NULL AUTO_INCREMENT PRIMARY KEY
TwoCode

17

Nun, Sie müssen zuerst das auto_incrementund primary keySie haben und dann Ihr hinzufügen, wie folgt:

-- drop auto_increment capability
alter table `users` modify column id INT NOT NULL;
-- in one line, drop primary key and rebuild one
alter table `users` drop primary key, add primary key(id);
-- re add the auto_increment capability, last value is remembered
alter table `users` modify column id INT NOT NULL AUTO_INCREMENT;

1
habe diesen Fehler erhalten: # 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von 'LTER TABLE-Benutzer ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)' in Zeile 1
Charles Jenkins

Schauen Sie sich Ihren Code an. Sie haben ihn veröffentlicht. Miss LTER und nicht ALter. Stellen Sie sicher, dass Sie alles kopiert haben
echo_Me

Danke, aber jetzt habe ich diesen Fehler: # 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von 'ALTER TABLE-Benutzer ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)' in Zeile 3 sorry!
Charles Jenkins

habe folgendes: # 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von '(id)' in Zeile 1
Charles Jenkins

Nun,

12

Wenn Sie den folgenden Befehl ausführen:

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

Dies zeigt Ihnen den Fehler:

ERROR 1060 (42S21): Duplicate column name 'id'

Dies liegt daran, dass dieser Befehl versucht, die neue Spalte mit dem Namen idzur vorhandenen Tabelle hinzuzufügen .

Um die vorhandene Spalte zu ändern, müssen Sie den folgenden Befehl verwenden:

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

Dies sollte funktionieren, um die vorhandene Spaltenbeschränkung zu ändern ....!


6

Löschen Sie den Primärschlüssel einer Tabelle, falls vorhanden:

 ALTER TABLE `tableName` DROP PRIMARY KEY;

Hinzufügen einer Spalte zum automatischen Inkrementieren zu einer Tabelle:

ALTER TABLE `tableName` ADD `Column_name` INT PRIMARY KEY AUTO_INCREMENT;

Ändern Sie die Spalte, die wir als Primärschlüssel betrachten möchten:

alter table `tableName` modify column `Column_name` INT NOT NULL AUTO_INCREMENT PRIMARY KEY;

5

Ändern Sie einfach das ADD in MODIFY und es wird funktionieren!

Ersetzen

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT

Zu

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;

3
ALTER TABLE users CHANGE id int( 30 ) NOT NULL AUTO_INCREMENT

Der Integer-Parameter basiert auf meiner Standard-SQL-Einstellung. Ich wünsche Ihnen einen schönen Tag


2
ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key FIRST

0

Suchen Sie nach bereits vorhandenen Primärschlüsseln mit einer anderen Spalte. Wenn ja, löschen Sie den Primärschlüssel mit:

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1
GO

und schreiben Sie dann Ihre Anfrage so wie sie ist.


0
ALTER TABLE `table` ADD `id` INT NOT NULL AUTO_INCREMENT unique

Versuche dies. Sie müssen Ihren Primärschlüssel nicht fallen lassen.


0

Für PostgreSQL müssen Sie SERIAL anstelle von auto_increment verwenden.

ALTER TABLE your_table_name ADD COLUMN id SERIAL NOT NULL PRIMARY KEY

-1

Gehen Sie so vor:

Make a dump of your database first

Remove the primary key like that

ALTER TABLE yourtable DROP PRIMARY KEY

Add the new column like that

ALTER TABLE yourtable Spalte hinzufügen ID INT NOT NULL AUTO_INCREMENT FIRST, ADD primäre KEY ID (Id)

Die Tabelle wird angezeigt und die AutoInc aktualisiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.