Ändern Sie eine MySQL-Spalte in AUTO_INCREMENT

194

Ich versuche, eine Tabelle so zu ändern, dass ihre Primärschlüsselspalte nachträglich erstellt wird AUTO_INCREMENT. Ich habe das folgende SQL ausprobiert, aber eine Syntaxfehlerbenachrichtigung erhalten.

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

Mache ich etwas falsch oder ist das nicht möglich?

+ -------------------- +
| VERSION () |
+ -------------------- +
| 5.0.75-0ubuntu10.2 |
+ -------------------- +
Kreuz
quelle

Antworten:

379
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment
römisch
quelle
3
Ich bin gespannt, warum Sie INT (4) vorschlagen würden. Irgend ein bestimmter Grund?
Steven Oxley
3
@Steven Oxley, weil ich meinen Tisch so deklariert habe.
C. Ross
30
Die Angabe einer Zahl in Klammern bewirkt für MySQL-Integer-Typen genau nichts ( na gut, fast nichts). Das einzige, was von der Anzahl beeinflusst werden kann, ist die Anzeigebreite, und es ist Sache des Kunden, dies zu tun. Aber lassen Sie sich nicht täuschen und denken Sie, dass es genauso funktioniert wie bei VARCHAR- und DECIMAL-Typen. In diesen Fällen wird die Datenmenge, die Sie dort speichern können, tatsächlich angegeben, während eine bestimmte INT-Variante immer die Speicherung der genauen Daten ermöglicht gleicher Wertebereich
Roland Bouman
Ich erhalte bei diesen Vorgängen immer einen Primärschlüsselfehler, daher habe ich Folgendes: SET FOREIGN_KEY_CHECKS = 0; ALTER TABLE document DROP PRIMARY KEY; ALTER TABLE document MODIFY COLUMN document_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL; SET FOREIGN_KEY_CHECKS = 1;
Fernando
Dies scheint in MySQL nicht zu funktionieren, da Sie die Spalte als Primärschlüssel festlegen müssen, da nur eine Spalte auto_increment sein darf (siehe auch Roland Boumans Antwort unten
charlchad
74

Roman hat recht, aber beachten Sie, dass die Spalte auto_increment Teil des PRIMARY KEY oder eines UNIQUE KEY sein muss (und in fast 100% der Fälle sollte es die einzige Spalte sein, aus der der PRIMARY KEY besteht):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY
Roland Bouman
quelle
10
+1. Primärschlüssel erforderlich, falls zum Zeitpunkt der Tabellenerstellung nicht definiert.
1
Dies bedeutet auch, dass die Daten in dieser Spalte bereits eindeutig sein müssen
Umair Malhi
10

In meinem Fall hat es nur funktioniert, wenn ich es gesetzt habe not null. Ich denke, das ist eine Einschränkung.

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;
Rabia Naz Khan
quelle
7

Die SQL, um dies zu tun, wäre:

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;

Es gibt mehrere Gründe, warum Ihr SQL möglicherweise nicht funktioniert. Zunächst müssen Sie den Datentyp erneut angeben ( INTin diesem Fall). Außerdem muss die Spalte, die Sie ändern möchten, indiziert sein (es muss nicht der Primärschlüssel sein, aber normalerweise ist dies das, was Sie möchten). Außerdem kann es AUTO_INCREMENTfür jede Tabelle nur eine Spalte geben. Daher möchten Sie möglicherweise die folgende SQL ausführen (wenn Ihre Spalte nicht indiziert ist):

ALTER TABLE `document` MODIFY `document_id` INT AUTO_INCREMENT PRIMARY KEY;

Weitere Informationen finden Sie in der MySQL-Dokumentation: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html für die Syntax der Änderungsspalte und http://dev.mysql.com/doc Weitere Informationen zum Angeben von Spalten finden Sie unter /refman/5.1/en/create-table.html .

Steven Oxley
quelle
6

Sie müssen den Typ der Spalte vor der auto_incrementDirektive angeben , d ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT. H.

Håvard S.
quelle
1
Es sollte seinMODIFY COLUMN
shxfee
5

AUTO_INCREMENT ist Teil des Datentyps der Spalte, müssen Sie den vollständigen Datentyp für die Spalte erneut definieren:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

( intAls Beispiel sollten Sie den Typ festlegen, den die Spalte zuvor hatte.)

Dan Soap
quelle
3

Sie können es so machen:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;
Aditya Kumar
quelle
Dies scheint nur eine Wiederholung aller anderen Antworten zu sein.
Pang
2

AUTO_INCREMENT ist Teil des Datentyps der Spalte, müssen Sie den vollständigen Datentyp für die Spalte erneut definieren:

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(Als Beispiel sollten Sie den Typ festlegen, den die Spalte zuvor hatte.)

KKK
quelle
2

Mit der folgenden Abfrage können Sie die automatische Erhöhung von document_id festlegen

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

Es wird bevorzugt, auch den Primärschlüssel document_id zu erstellen

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;
Azhar Zafar
quelle
1
Beachten Sie, dass wenn diese Spalte bereits ein Primärschlüssel ist, Sie sie dort nicht erneut deklarieren können, da sonst Fehler bei mehreren Primärschlüsseln auftreten (Sie würden erwarten, dass sie dort etwas cleverer ist, und sehen, dass es sich um denselben Primärschlüssel handelt, denke ich). . In diesem Fall überspringen Sie einfach den PRIMARY KEY und es hat keinen Einfluss auf die vorhandene Primärschlüsseleinstellung in dieser Spalte
George Birbilis
2

Die folgende Aussage funktioniert. Beachten Sie, dass Sie den Datentyp für den Spaltennamen erneut angeben müssen (deklarieren Sie den Datentyp, den die Spalte zuvor hatte).

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;
user5082888
quelle
2

Wenn keines der oben genannten Verfahren funktioniert, versuchen Sie dies. Das habe ich in MYSQL gemacht und ja, Sie müssen den Spaltennamen (document_id) zweimal schreiben.

ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;
Susie
quelle
1

Um die Spalte in MySQL zu ändern, verwenden wir Schlüsselwörter zum Ändern und Ändern. Angenommen, wir haben eine Tabelle erstellt wie:

create table emp(
    id varchar(20),
    ename varchar(20),
    salary float
);

Jetzt möchten wir den Typ der Spalten-ID mit automatischem Inkrement in eine Ganzzahl ändern. Sie können dies mit einem Befehl wie dem folgenden tun:

alter table emp modify column id int(10) auto_increment;
Solarissmoke
quelle
1

Vorherige Tabellensyntax:

CREATE TABLE apim_log_request (TransactionId varchar(50) DEFAULT NULL);

Verwenden Sie diese Abfrage, um die TransactionId in das automatische Inkrementieren zu ändern

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;
Usman Yaqoob
quelle
1
alter table tbl_user MODIFY COLUMN id int(10) auto_increment;
Aminur Rahman
quelle
1

Genau wie dieser:

alter table document modify column id int(11) auto_increment;

in erster Linie
quelle
0

Wenn Sie die Spalte erneut definieren, müssen Sie den Datentyp erneut angeben und ihm auto_increment hinzufügen, da er Teil des Datentyps ist.

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;
Optimierer
quelle
0

Spalte als Primärschlüssel und auto_increment gleichzeitig festlegen:

  mysql> ALTER TABLE persons MODIFY COLUMN personID INT auto_increment PRIMARY KEY;
    Query OK, 10 rows affected (0.77 sec)
    Records: 10  Duplicates: 0  Warnings: 0

    mysql>
Nesimi Taghizade
quelle
0

ALTER TABLE Tabellenname MODIFY COLUMN id Datentyp auto_increment;

Kartik Madnani
quelle
-3

Verwenden Sie die folgenden Abfragen:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
Doug Cobain
quelle