Adicionando várias colunas APÓS uma coluna específica no MySQL

361

Preciso adicionar várias colunas a uma tabela, mas posicionar as colunas após uma coluna chamada lastname.

Eu tentei isso:

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

Eu recebo este erro:

Você tem um erro na sua sintaxe SQL; verifique o manual que corresponde à versão do servidor MySQL para a sintaxe correta a ser usada perto de ') APÓS lastname' na linha 7


Como posso usar APÓS uma consulta como esta?

Coala
fonte
5
Que dialeto você está falando? Parece mysql para mim. Mas a ALTER TABLEsintaxe varia um pouco entre os dialetos.
Damien_The_Unbeliever
11
Acho que você precisa de uma palavra-chave AFTER em cada uma das colunas que está adicionando. Se isso significa que você precisa que todos os 3 sejam APÓS o sobrenome ou uma instrução ALTER TABLE separada por nova coluna, não posso dizer com certeza.
Zec

Respostas:

728

Tente isto

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

verifique a sintaxe

Ayyappan Sekar
fonte
6
[ Como um adicional de informação ] múltipla ADD, ALTER, DROP, e CHANGEcláusulas são permitidos em uma única ALTER TABLEinstrução, separados por vírgulas. Esta é uma extensão do MySQL ao SQL padrão, que permite apenas uma de cada cláusula por instrução ALTER TABLE.
informatik01
@ Ayyappan Podemos fazer isso no servidor sql?
Roshan
77

Se você deseja adicionar uma única coluna após um campo específico, a seguinte consulta MySQL deve funcionar:

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

Se você quiser adicionar várias colunas, precisará usar o comando 'ADICIONAR' toda vez para uma coluna. Aqui está a consulta do MySQL para isso:

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

Aponte para observação

No segundo método, a última ADD COLUMN coluna realmente deve ser a primeira coluna que você deseja anexar à tabela.

Por exemplo: se você deseja adicionar count, log, statusna ordem exata depois lastname, em seguida, a sintaxe seria realmente:

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
user3106476
fonte
3
A segunda versão funcionou perfeitamente bem para mim. Estou usando o MySql 5.5.25.
Norman
faz o último pedaço de código adicionar as colunas na ordem count, log, statusou count, status, log?
Sarfaraaz
11
nota: se você não adicionar o bit 'DEPOIS do sobrenome', a ordem em que a última coluna que você colocar nessa lista de alteração de tabela será exibida primeiro não será aplicada. Portanto, quando você altera a tabela ALTER TABLE ADD COLUMN blah1, ADD COLUMN blah2; (observe a cláusula 'DEPOIS'), a coluna blah1 será anexada primeiro e depois blah2.
Hongyi Li
10

Você não pode mencionar vários nomes de coluna com vírgulas usando ADD COLUMN. Você precisa mencionar ADD COLUMNsempre que definir uma nova coluna.

Piyush Saxena
fonte
4
Eu dei um +1, mas isso deve ser um comentário para a resposta aceita
mjsarfatti
9

Este está correto:

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`;
Denys Popov
fonte
3
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

Você pode fazer isso com isso, funcionando bem para mim.

Gaurav Singh
fonte
1

Uma possibilidade seria não se preocupar em reordenar as colunas na tabela e simplesmente modificá-lo adicionando as colunas. Em seguida, crie uma exibição com as colunas na ordem desejada - supondo que a ordem seja realmente importante. A visualização pode ser facilmente alterada para refletir qualquer pedido que você desejar. Como não consigo imaginar que o pedido seja importante para aplicativos programáticos, a visualização deve ser suficiente para as consultas manuais em que isso possa ser importante.

Ahmed
fonte
4
se posso adicionar meus dois centavos, "posicionamento", seja de colunas ou linhas da tabela, deve ser irrelevante. As planilhas usam local para encontrar coisas, os bancos de dados não.
Mike S.
1

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

Isso dará bons resultados.

TechyFlick
fonte
0

Este trabalho é bom para mim:

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';
Aiswarya TS
fonte
Roubar um comentário para obter votos. Não faça isso companheiro.
precisa saber é o seguinte
0

A solução que funcionou para mim com o valor padrão 0 é a seguinte

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0
Jorge Santos Neill
fonte
0

Alternativamente:

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

Colocá-los-á na ordem que você deseja enquanto simplifica a instrução AFTER.

WestAce
fonte