Ä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 |
+ -------------------- +

Antworten:


379
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

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

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;

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 .


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.


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.)


3

Sie können es so machen:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;

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.)


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;

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;

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 ;

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;

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;



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;

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>


-3

Verwenden Sie die folgenden Abfragen:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
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.