Aggiunta di più colonne DOPO una colonna specifica in MySQL


362

Devo aggiungere più colonne a una tabella ma posizionare le colonne dopo aver chiamato una colonna lastname.

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:

Si è verificato un errore nella sintassi SQL; controlla il manuale corrispondente alla versione del tuo server MySQL per la sintassi corretta da usare vicino a ") DOPO lastname" alla riga 7


Come posso usare AFTER in una query come questa?


5
Di che dialetto stai parlando? Mi sembra mysql. Ma la ALTER TABLEsintassi varia leggermente tra i dialetti.
Damien_The_Unbeliever,


1
Penso che tu abbia bisogno di una parola chiave AFTER su ciascuna delle colonne che stai aggiungendo. Che ciò significhi che hai bisogno di tutti e 3 per essere DOPO il cognome o un'istruzione ALTER TABLE separata per nuova colonna, non posso dirlo con certezza.
Zec,

Risposte:


729

Prova questo

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`;

controlla la sintassi


6
[ Come ulteriori informazioni ] multipla ADD, ALTER, DROP, e CHANGEsono consentiti clausole in un unico ALTER TABLEcomunicato, separati da virgole. Questa è un'estensione MySQL a SQL standard, che consente solo una di ciascuna clausola per ogni istruzione ALTER TABLE.
informatik01,

@Ayyappan Possiamo farlo in SQL Server?
Roshan,

77

Se vuoi aggiungere una singola colonna dopo un campo specifico, allora dovrebbe funzionare la seguente query MySQL:

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

Se si desidera aggiungere più colonne, è necessario utilizzare il comando 'AGGIUNGI' ogni volta per una colonna. Ecco la query MySQL per questo:

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 COLUMN colonna dovrebbe effettivamente essere la prima colonna che si desidera aggiungere alla tabella.

Ad esempio: se si desidera aggiungere count, log, statusnell'ordine esatto dopo lastname, poi la sintassi sarebbe in realtà:

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

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

non l'ultimo pezzo di codice aggiungere le colonne nell'ordine count, log, statuso count, status, log?
Sarfaraaz,

1
nota: se non si aggiunge il bit "DOPO il cognome", l'ordinamento in cui viene visualizzata per prima l'ultima colonna nell'elenco di tabelle alterate non si applica. Quindi quando fai ALTER TABLE table AGGIUNGI COLONNA blah1, AGGIUNGI COLONNA blah2; (nota nessuna clausola 'DOPO'), la colonna blah1 verrà aggiunta prima, quindi blah2.
Hongyi Li,

10

Non puoi menzionare più nomi di colonne con virgole utilizzando ADD COLUMN. Devi menzionare ADD COLUMNogni volta che definisci una nuova colonna.


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

9

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`;

3
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

Puoi farlo con questo, lavorando bene per me.


1

Una possibilità sarebbe quella di non preoccuparsi di riordinare le colonne nella tabella e semplicemente modificarla aggiungendo le colonne. Quindi, crea una vista con le colonne nell'ordine desiderato, supponendo che l'ordine sia veramente importante. La vista può essere facilmente modificata per riflettere qualsiasi ordine desiderato. Dal momento che 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.


4
se posso aggiungere i miei due centesimi, il "posizionamento", sia che si tratti di colonne o righe di una tabella, dovrebbe essere irrilevante. I fogli di calcolo usano la posizione per trovare cose, i database no.
Mike S.

1

ALTER TABLE listingADD countINT (5), ADD logVARCHAR (200), ADD statusVARCHAR (20) DOPO stat

Darà buoni risultati.


0

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';

Rubare un commento per ottenere voti. Non farlo amico.
MBouwman,

0

La soluzione che ha funzionato per me con il valore predefinito 0 è la seguente

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0

0

In alternativa:

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

Li metterà nell'ordine desiderato mentre razionalizzi l'istruzione AFTER.

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.