2013-07-09 14 views
229

Devo aggiungere più colonne a una tabella ma posizionare le colonne dopo una colonna denominata lastname.alter tabella aggiungi PIÙ colonne DOPO colonna1

Ho provato questo:

ALTER TABLE `users` ADD COLUMN 
(
    `count` smallint(6) NOT NULL, 
    `log` varchar(12) NOT NULL, 
    `status` int(10) unsigned NOT NULL 
) 
AFTER `lastname`; 

ottengo questo errore:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AFTER lastname ' at line 7

Come posso usare dopo in una query come questa?

+2

Cosa dialetto state parlando? Mi sembra mysql. Ma la sintassi 'ALTER TABLE' varia leggermente tra i dialetti. –

+2

Siamo spiacenti, sì mysql. – Koala

+0

possibile duplicato di [MySQL Alter Table Aggiungi campo prima o dopo un campo già presente] (http://stackoverflow.com/questions/3379454/mysql-alter-table-add-field-before-or-after-a-field -already-present) –

risposta

471

Prova questo controllo

ALTER TABLE users 
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`, 
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`, 
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`; 

il syntax

1

Una possibilità potrebbe essere quella di non preoccuparsi di riordinare le colonne nella tabella e semplicemente modificarlo aggiungendo le colonne. Quindi, crea una vista con le colonne nell'ordine desiderato, assumendo che l'ordine sia veramente importante. La vista può essere facilmente modificata per riflettere qualsiasi ordine che si desidera. Poiché non riesco a immaginare che l'ordine sarebbe importante per le applicazioni programmatiche, la vista dovrebbe essere sufficiente per quelle query manuali in cui potrebbe essere importante.

+3

se posso aggiungere i miei due centesimi, il "posizionamento" se le colonne della tabella o le righe, dovrebbe essere irrilevante. I fogli di lavoro utilizzano la posizione per trovare le cose, i database no. –

54

Se si desidera aggiungere singola colonna, dopo campo specifico, quindi la query mysql è:

ALTER TABLE users 
    ADD COLUMN count SMALLINT(6) NOT NULL 
    AFTER lastname 

Se si desidera aggiungere più colonne, quindi è necessario utilizzare il comando 'Aggiungi' ogni volta per una colonna. La query mysql come segue come:

ALTER TABLE users 
    ADD COLUMN count SMALLINT(6) NOT NULL, 
    ADD COLUMN log VARCHAR(12) NOT NULL, 
    ADD COLUMN status INT(10) UNSIGNED NOT NULL 
    AFTER lastname 

punto da notare: Nel secondo metodo, l'ultima ADD COLUMNcolonna dovrebbe in realtà essere la prima colonna si desidera aggiungere alla tabella.

per esempio: se si desidera aggiungere count, log, status in ordine dopo lastname, quindi la sintassi sarebbe in realtà:

ALTER TABLE users 
    ADD COLUMN log VARCHAR(12) NOT NULL, 
    ADD COLUMN status INT(10) UNSIGNED NOT NULL, 
    ADD COLUMN count SMALLINT(6) NOT NULL 
    AFTER lastname 
+1

La seconda versione con più colonne non ha funzionato per me. – divinedragon

+3

La seconda versione ha funzionato perfettamente per me. Sto usando MySql 5.5.25. – Norman

+0

fa l'ultimo bit di codice aggiungere le colonne nell'ordine 'count',' log', 'status' o' count', 'status',' log'? – Sarfaraaz

1

ALTER TABLE users Aggiungi colonna COLUMN NAME DATATYPE (SIZE) DOPO EXISTING COLUMN NAME;

Si può fare con questo, funziona bene per me.

6

Questo è corretto:

ALTER TABLE `users` 
    ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`, 
    ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`, 
    ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`; 
4

Non si può parlare di più nomi delle colonne con le virgole che utilizzano ADD COLUMN. Devi citare ADD COLUMN ogni volta che definisci una nuova colonna.

+1

Ho dato un +1 ma questo dovrebbe essere un commento alla risposta accettata – mjsarfatti

1

Questo funziona bene per me:

ALTER TABLE 'users' 
ADD COLUMN 'count' SMALLINT(6) NOT NULL AFTER 'lastname', 
ADD COLUMN 'log' VARCHAR(12) NOT NULL AFTER 'count', 
ADD COLUMN 'status' INT(10) UNSIGNED NOT NULL AFTER 'log'; 
Problemi correlati