Modifica una colonna MySQL in AUTO_INCREMENT


194

Sto cercando di modificare una tabella per renderne la colonna chiave primaria AUTO_INCREMENTdopo il fatto. Ho provato il seguente SQL, ma ho ricevuto una notifica di errore di sintassi.

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

Sto facendo qualcosa di sbagliato o non è possibile?

+ -------------------- +
| VERSIONE () |
+ -------------------- +
| 5.0.75-0ubuntu10.2 |
+ -------------------- +

Risposte:


379
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

3
Sono curioso di sapere perché consiglieresti INT (4). Qualche motivo particolare?
Steven Oxley,

3
@Steven Oxley perché ho dichiarato il mio tavolo in quel modo.
C. Ross,

30
Specificare un numero tra parentesi non fa esattamente nulla (beh ok, quasi nulla) per i tipi interi di MySQL. L'unica cosa che può essere influenzata dal numero è la larghezza del display, e spetta al cliente farlo. Ma non lasciarti ingannare e pensa che funzioni come per i tipi VARCHAR e DECIMAL - in quei casi, la quantità di dati che puoi archiviare è effettivamente specificata, mentre un particolare sapore di INT consente sempre di memorizzare l'esatto stesso intervallo di valori
Roland Bouman

Ricevo sempre un errore chiave primaria mentre eseguo queste operazioni, quindi ho questo è quello che faccio: SET FOREIGN_KEY_CHECKS = 0; Documento ALTER TABLE DROP PRIMARY KEY; ALTER TABLE document MODIFY COLUMN document_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL; SET FOREIGN_KEY_CHECKS = 1;
Fernando,

Questo non sembra funzionare in MySQL perché è necessario impostare la colonna come chiave primaria poiché solo una colonna può essere auto_increment (vedi anche la risposta di Roland Bouman di seguito
charlchad

74

Roman ha ragione, ma nota che la colonna auto_increment deve far parte del PRIMARY KEY o di UNQUE KEY (e in quasi il 100% dei casi, dovrebbe essere l'unica colonna che costituisce il PRIMARY KEY):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY

10
+1. Chiave primaria richiesta se non definita al momento della creazione della tabella.

1
Anche questo significa che i dati in quella colonna devono essere già unici
Umair Malhi

10

Nel mio caso ha funzionato solo quando l'ho messo not null. Penso che questo sia un vincolo.

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;

7

L'SQL per fare questo sarebbe:

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

Ci sono un paio di ragioni per cui il tuo SQL potrebbe non funzionare. Innanzitutto, è necessario specificare nuovamente il tipo di dati ( INTin questo caso). Inoltre, la colonna che stai tentando di modificare deve essere indicizzata (non deve essere la chiave primaria, ma di solito è quello che vorresti). Inoltre, può esserci solo una AUTO_INCREMENTcolonna per ogni tabella. Quindi, potresti voler eseguire il seguente SQL (se la tua colonna non è indicizzata):

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

Ulteriori informazioni sono disponibili nella documentazione di MySQL: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html per la sintassi della colonna di modifica e http://dev.mysql.com/doc /refman/5.1/en/create-table.html per ulteriori informazioni sulla specifica di colonne.


6

È necessario specificare il tipo di colonna prima della auto_incrementdirettiva, ad es ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT.


1
Dovrebbe essereMODIFY COLUMN
shxfee,

5

AUTO_INCREMENT fa parte del tipo di dati della colonna, è necessario definire nuovamente il tipo di dati completo per la colonna:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

( intpreso come esempio, dovresti impostarlo sul tipo che la colonna aveva prima)


3

Puoi farlo in questo modo:

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

Questa sembra essere solo una ripetizione di tutte le altre risposte.
Pang

2

AUTO_INCREMENT fa parte del tipo di dati della colonna, è necessario definire nuovamente il tipo di dati completo per la colonna:

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(int preso come esempio, dovresti impostarlo sul tipo che la colonna aveva prima)


2

È possibile utilizzare la seguente query per fare in modo che document_id si incrementi automaticamente

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

Si preferisce creare anche la chiave primaria document_id

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;

1
Nota che se quella colonna è già una chiave primaria non puoi dichiararla di nuovo lì, altrimenti si verifica un errore su più chiavi primarie (ti aspetteresti che sia un po 'più intelligente lì e vedi che è la stessa chiave primaria immagino) . Quindi in quel caso salta semplicemente la PRIMARY KEY e ciò non influisce sull'impostazione della chiave primaria esistente su quella colonna
George Birbilis,

2

L'istruzione seguente funziona. Si noti che è necessario menzionare nuovamente il tipo di dati per il nome della colonna (dichiarare nuovamente il tipo di dati che era la colonna prima).

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;

2

Se nessuna delle precedenti funzioni funziona, provare questo. Questo è quello che ho fatto in MYSQL e sì, è necessario scrivere due volte il nome della colonna (document_id).

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

1

Per modificare la colonna in mysql usiamo alter e change parole chiave. Supponiamo di aver creato una tabella come:

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

Ora vogliamo modificare il tipo di ID colonna in numero intero con incremento automatico. Puoi farlo con un comando come:

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

1

Sintassi della tabella precedente:

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

Per modificare TransactionId in incremento automatico, utilizzare questa query

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;


1

Proprio come questo:

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


0

Mentre stai ridefinendo nuovamente la colonna, devi specificare nuovamente il tipo di dati e aggiungere auto_increment ad esso poiché fa parte del tipo di dati.

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

0

Impostazione della colonna come chiave primaria e incremento automatico allo stesso tempo:

  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

Utilizzare le seguenti query:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.