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?


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


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

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.


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

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

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


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.


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.


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

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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.