Estou curioso ... O que há de errado em deixar a alteração falhar se a coluna já existir?
Drek Downey #
Na verdade, preciso fornecer o arquivo .sql ao meu cliente que tenha todas as consultas relacionadas às alterações na estrutura do banco de dados. Não posso enviar todo o banco de dados para eles. Eu só quero enviar-lhes alterações de banco de dados. há muito mais consultas nesse arquivo sql. Se essa consulta sobre a criação de colunas falhar, todas as consultas serão reprovadas. É por isso que eu quero usar a condição if para criar a coluna.
Zzzzz:
Se o seu banco de dados suportar, você poderá usar um gatilho. ANTES DE INSERIR.
precisa saber é o seguinte
Respostas:
7
O MySQL ALTER TABLEnão possui IF EXISTSespecificação.
Você pode fazer o seguinte usando um processo armazenado ou uma linguagem de programação, se isso for algo que você precisará fazer regularmente:
Pseudo-código:
Descubra se a coluna existe usando o SQL abaixo:
SELECIONE column_name
DE INFORMATION_SCHEMA. COLUMNS
WHERE TABLE_SCHEMA= [Nome do banco de dados] AND TABLE_NAME= [Nome da tabela];
Se a consulta acima retornar um resultado, significa que a coluna existe; caso contrário, você poderá prosseguir e criar a coluna.
No MySQL / MariaDB, recebo um erro ao usar essa consulta, afirmando que column_namenão existe. Reformulei a consulta para:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
Jesus Alonso Abad
2
Para um simples 0 ou 1 resposta em ambos MySQL e (eu acho) MariaDB:SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
piojo
13
Atualmente existe atualmente para Maria DB 10.219
ALTERTABLE test ADDCOLUMNIFNOTEXISTS column_a VARCHAR(255);
Bônus, funciona também para MODIFY
ALTERTABLE test MODIFY IFEXISTS column_a VARCHAR(255);
Respostas:
O MySQL
ALTER TABLE
não possuiIF EXISTS
especificação.Você pode fazer o seguinte usando um processo armazenado ou uma linguagem de programação, se isso for algo que você precisará fazer regularmente:
Pseudo-código:
Descubra se a coluna existe usando o SQL abaixo:
SELECIONE
column_name
DEINFORMATION_SCHEMA
.COLUMNS
WHERETABLE_SCHEMA
= [Nome do banco de dados] ANDTABLE_NAME
= [Nome da tabela];Se a consulta acima retornar um resultado, significa que a coluna existe; caso contrário, você poderá prosseguir e criar a coluna.
fonte
column_name
não existe. Reformulei a consulta para:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
Atualmente existe atualmente para Maria DB 10.219
Bônus, funciona também para MODIFY
fonte
Você pode usar esta solução, já mencionada em outra publicação StackOverFlow: (Ref .: https://stackoverflow.com/a/31989541/ )
MySQL - ALTER TABLE para adicionar uma coluna se ela não existir:
fonte
Isso abaixo funcionou para mim:
fonte