Eu gostaria de escrever um único comando SQL para eliminar várias colunas de uma única tabela em uma ALTER TABLE
instrução.
Da documentação ALTER TABLE do MSDN ...
DROP { [CONSTRAINT] constraint_name | COLUMN column_name }
Especifica que constraint_name ou column_name é removido da tabela. DROP COLUMN não é permitido se o nível de compatibilidade for 65 ou anterior. Várias colunas e restrições podem ser listadas.
Ele diz que várias colunas podem ser listadas na declaração, mas a sintaxe não mostra uma vírgula opcional ou qualquer coisa que possa sugerir a sintaxe.
Como devo escrever meu SQL para soltar várias colunas em uma instrução (se possível)?
fonte
Resumindo
Oracle :
MS SQL Server :
MySQL :
PostgreSQL
Estar ciente
DROP COLUMN
não remove fisicamente os dados de alguns DBMS. Por exemplo, para MS SQL. Para tipos de comprimento fixo ( int , numérico , flutuante , data e hora , identificador exclusivo etc), o espaço é consumido mesmo para os registros adicionados depois que as colunas foram descartadas. Para se livrar do espaço desperdiçado, façaALTER TABLE ... REBUILD
.fonte
COLUMN
palavras-chave como no MySql.Esteja ciente de que o DROP COLUMN não remove fisicamente os dados e, para tipos de comprimento fixo (int, numérico, flutuante, datetime, identificador exclusivo etc.), o espaço é consumido mesmo para os registros adicionados depois que as colunas foram descartadas. Para se livrar do espaço desperdiçado, faça
ALTER TABLE ... REBUILD
.fonte
ALTER INDEX PK_IndexName ON TableName REBUILD
e recuperar o espaço. Isso é descrito aqui: msdn.microsoft.com/en-us/library/ms189858.aspx na seção "Reconstruindo um índice".Isso pode ser tarde, mas compartilhá-lo para os novos usuários que visitam esta pergunta. Para descartar várias colunas, a sintaxe real é
Portanto, para cada coluna, você precisa especificar "soltar coluna" no Mysql 5.0.45.
fonte
A sintaxe especificada pela Microsoft para descartar uma parte da coluna de uma instrução ALTER é esta
Observe que [, ... n] aparece após o nome da coluna e no final de toda a cláusula de descarte. O que isso significa é que existem duas maneiras de excluir várias colunas. Você pode fazer isso:
ou isto
Essa segunda sintaxe é útil se você deseja combinar a queda de uma coluna com a eliminação de uma restrição:
Ao descartar colunas, o SQL Sever não recupera o espaço ocupado pelas colunas descartadas. Para tipos de dados armazenados em linha nas linhas (int por exemplo), pode até ocupar espaço nas novas linhas adicionadas após a instrução alter. Para contornar isso, você precisa criar um índice em cluster na tabela ou reconstruir o índice em cluster, se ele já tiver um. A reconstrução do índice pode ser feita com um comando REBUILD após modificar a tabela. Mas esteja avisado que isso pode ser lento em mesas muito grandes. Por exemplo:
fonte
Para o MySQL (versão 5.6), você não pode fazer várias
drop
descargas de coluna com uma única instrução, mas com váriasdrop
instruções:Entre,
drop <col_name>
está abreviado para,drop column <col_name>
como você pode ver dedrop c3
cima.fonte
Se for apenas uma coluna para excluir, a sintaxe abaixo funciona
ALTER TABLE tablename DROP COLUMN column1;
Para excluir várias colunas, usando o método
DROP COLUMN
não funciona, a sintaxe abaixo funcionaALTER TABLE tablename DROP (column1, column2, column3......);
fonte
fonte
Genérico:
Por exemplo:
fonte
esta consulta irá alterar a coluna múltipla testá-lo.
fonte
para MySQL DB.
Ou você pode adicionar alguma coluna enquanto altera na mesma linha:
fonte