2010-06-22 23 views
17

Sto cambiando la mia tabella mysql db da id (auto) a uid.mysql, modifica colonna rimuovi chiave primaria e incremento automatico

ALTER TABLE companies DROP PRIMARY KEY; 
ALTER TABLE companies ADD PRIMARY KEY (`uuid`); 

Questo è l'errore che ottengo ..

[SQL] ALTER TABLE companies DROP PRIMARY KEY; 
[Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key 

che capisco, ho bisogno di cambiare l'id a un non-autoincrement perché mi cade come la chiave primaria.? Qual è la sintassi per cambiare una colonna per rimuovere la chiave primaria e l'incremento automatico?

ALTER TABLE companies change id id ?????????? int(11) 

risposta

24

Se è necessario rimuovere l'auto-incremento e la chiave primaria dalla colonna id in una singola istruzione SQL, questo dovrebbe fare:

ALTER TABLE companies DROP PRIMARY KEY, CHANGE id id int(11); 

In realtà, si dovrebbe essere in grado di fare tutto in un unico ALTER TABLE query:

ALTER TABLE companies 
DROP PRIMARY KEY, 
CHANGE id id int(11), 
ADD PRIMARY KEY (uuid); 
+0

Se lo faccio come 3 dichiarazioni funzionerà .. ALTER TABLE le aziende cambiano id id int (11); ALTER TABLE società DROP PRIMARY KEY; aziende ALTER TABLE AGGIUNGI CHIAVE PRIMARIA (uuid); – Brett

+1

Nella mia situazione, voglio solo eliminare l'incremento automatico. Ho provato questo: 'ALTER TABLE myTable CHANGE _id _id INT (12)' ma dice "Errore di sintassi vicino a CHANGE". Cosa sto facendo di sbagliato qui? –

2

La query per incremento di rimozione automatica è:

alter table companies DROP PRIMARY KEY, 
change id id int(11) NOT NULL 

Ora è possibile visualizzare la struttura della tabella senza incremento automatico.

Se si desidera aggiungere chiave primaria un'altra colonna, quindi utilizzare questa query

alter table companies add PRIMARY KEY(uuid) 

Se si vuole far cadere incremento automatico, chiave primaria e aggiungere la chiave primaria per nuova colonna nella stessa query, quindi utilizzare questa query

alter table comapnies DROP PRIMARY KEY, 
    change id id int(11) NOT NULL, 
    add PRIMARY KEY(uuid) 
4

Quando non stai cambiando il nome della colonna è possibile utilizzare MODIFY:

ALTER TABLE `companies` MODIFY `id` int(11), 
          DROP PRIMARY KEY, 
        ADD PRIMARY KEY (`uuid`); 

In questo modo, tutto in un'unica istruzione alterata viene trattato anche come atomico, quindi non c'è alcuna possibilità di incoerenza tra le query (a differenza dell'esecuzione di più istruzioni nella riga).

Problemi correlati