Eu recebi o seguinte erro ao tentar alterar o tipo de dados de uma coluna e definir um novo valor padrão:
ALTER TABLE foobar_data ALTER COLUMN col VARCHAR(255) NOT NULL SET DEFAULT '{}';
ERRO 1064 (42000): 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 'VARCHAR (255) NOT NULL SET DEFAULT' {} '' na linha 1
Respostas:
Uma segunda possibilidade que faz o mesmo (graças a juergen_d):
fonte
column
é opcional. Você pode simplesmente usarALTER TABLE foobar_data MODIFY col VARCHAR(255) NOT NULL DEFAULT '{}';
orALTER TABLE foobar_data CHANGE col col VARCHAR(255) NOT NULL DEFAULT '{}';
e o resultado será o mesmo.{}
.col
s um ao lado do outro está correto? (como estecol col
)DEFAULT
valor. Isso processará todas as linhas da tabela para nada (muito tempo em tabelas enormes). Em vez disso, use oALTER TABLE <table_name> ALTER COLUMN <column_name> SET DEFAULT <value>
que é instantâneo.Como acompanhamento, se você quiser apenas definir um padrão, tenha certeza de que pode usar a sintaxe ALTER .. SET. Só não coloque todas as outras coisas lá. Se você deseja inserir o restante da definição da coluna, use a sintaxe MODIFY ou CHANGE conforme a resposta aceita.
De qualquer forma, a sintaxe ALTER para definir um padrão de coluna (já que era isso que eu estava procurando quando cheguei aqui):
Para o qual 'literal' também pode ser um número (por exemplo
...SET DEFAULT 0
). Eu não tentei com...SET DEFAULT CURRENT_TIMESTAMP
isso, mas por que não eh?fonte
ALTER TABLE table_name MODIFY COLUMN column_name TIMESTAMP NOT NULL DEFAULT current_timestamp;
DEFAULT
valor.NOW()
oucurrent_timestamp()
@Malaise @NereisSe você deseja adicionar um valor padrão para a coluna já criada, isso funciona para mim:
fonte
Para DEFAULT CURRENT_TIMESTAMP:
Observe a declaração double columnname
Removendo DEFAULT CURRENT_TIMESTAMP:
fonte
Resposta Aceita funciona bem.
No caso de erro de uso inválido do valor NULL , em valores NULL , atualize todos os valores nulos para o valor padrão nessa coluna e tente fazer a alteração.
fonte
Caso o procedimento acima não funcione para você (por exemplo: você está trabalhando com o novo SQL ou Azure ), tente o seguinte:
1) elimine a restrição de coluna existente (se houver):
2) crie um novo:
fonte
Tente isto
como isso
fonte