2010-01-30 11 views
142

Ich versuche, eine Tabelle zu ändern, um seine primäre Schlüsselspalte AUTO_INCREMENT nach der Tatsache zu machen. Ich habe den folgenden sql versucht, aber einen Syntaxfehler bekommen:Mysql - Ändern einer Spalte zu AUTO_INCREMENT

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

Antwort

274
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? –

+2

@ Steven Oxley, weil ich meinen Tisch so erklärt habe. –

+27

Das Angeben einer Zahl zwischen Klammern bewirkt genau * nichts * (gut ok, fast nichts) für MySQL Integertypen. Das einzige, was durch die Zahl beeinflusst werden kann, ist die Anzeigebreite, und es liegt an dem Client, dies zu tun. Aber lassen Sie sich nicht täuschen und denken Sie, dass es wie für VARCHAR- und DECIMAL-Typen funktioniert - in diesen Fällen wird die Menge der Daten, die Sie dort speichern können, tatsächlich angegeben, während ein bestimmter Geschmack von INT immer die Speicherung des genauen erlaubt gleicher Wertebereich –

3

AUTO_INCREMENT Teil des Spaltendatentypen ist, haben Sie wieder den vollständigen Datentyp für die Spalte zu definieren:

ALTER TABLE document 
ALTER COLUMN document_id int AUTO_INCREMENT 

(int als Beispiel genommen, können Sie es auf die eingestellte sollten Geben Sie die Spalte vorher ein)

4

Sie müssen den Typ der Spalte vor der Anweisung auto_increment angeben, dh ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT.

+1

Es sollte 'MODIFY COLUMN' – shxfee

58

Roman ist richtig, 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, die den PRIMARY KEY bildet):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY 
+9

+1 sein. Primärschlüssel erforderlich, wenn er zum Zeitpunkt der Tabellenerstellung nicht definiert wurde. –

4

Die SQL, dies zu tun wäre:

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

Es gibt ein paar Gründe, die Ihre SQL arbeiten möglicherweise nicht. Zuerst müssen Sie den Datentyp neu angeben (INT in diesem Fall). Außerdem muss die Spalte, die Sie ändern möchten, indiziert sein (sie muss nicht der Primärschlüssel sein, aber normalerweise ist dies das, was Sie möchten). Außerdem kann für jede Tabelle nur eine AUTO_INCREMENT Spalte vorhanden sein. So können Sie möchten die folgenden SQL ausführen (wenn die Spalte nicht indiziert ist):

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

Sie finden weitere Informationen in der MySQL-Dokumentation: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html für die Spalte Syntax ändern und http://dev.mysql.com/doc/refman/5.1/en/create-table.html Weitere Informationen zur Angabe von Spalten .

2

AUTO_INCREMENT Teil des Spaltendatentypen ist, haben Sie wieder den vollständigen Datentyp für die Spalte zu definieren:

ALTER TABLE document 
MODIFY COLUMN document_id int AUTO_INCREMENT 

(als Beispiel int, sollten Sie es auf die Art stellen Sie die Spalt zuvor hatten)

2

Wenn keiner der oben genannten funktioniert, versuchen Sie dies. Dies ist, was ich in MYSQL getan habe 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 ; 
2

Nachstehende Anweisung funktioniert. Beachten Sie, dass Sie den Datentyp für den Spaltennamen erneut eingeben müssen

ALTER TABLE document 
MODIFY COLUMN document_id int AUTO_INCREMENT; 
4

In meinem Fall funktionierte es nur, wenn ich Not null setzte. Ich denke, das ist eine Einschränkung.

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;

0

Um die Spalte in mysql wir Schlüsselwörter verwenden, verändern und modifizieren zu ändern.Angenommen, wir haben eine Tabelle wie folgt erstellt:

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

Jetzt wollen wir den Typ der Spalten-ID auf Integer mit automatischem Inkrement ändern. Man könnte dies wie mit einem Befehl tun:

alter table emp modify column id int(10) auto_increment; 
0

altes tbl_user Tabellenspalte id int (10) auto_increment modifizieren;

-3

Verwenden Sie die folgenden Abfragen:

ALTER TABLE YourTable DROP COLUMN IDCol 

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1) 
0

Vorherige Tabelle Syntax:

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

Für die TransactionId zu Autoinkrement Verwendung dieser Abfrage Ändern

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment; 
-1

Wie Sie die Spalte neu definieren erneut müssen Sie den Datentyp erneut angeben und auto_increment hinzufügen, da er Teil des Datas ist Ich.

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