Posso renomear os valores em uma coluna MySQL ENUM em uma consulta?
12
Suponha que eu tenha uma tabela de banco de dados com um ENUM('value_one','value_two'). Eu quero mudar isso para um ENUM('First value','Second value'). Atualmente, estou fazendo o seguinte:
A técnica que estamos prestes a demonstrar não é suportada, não documentada e pode não funcionar. Use-o por sua conta e risco. Aconselhamos que você faça backup dos seus dados primeiro!
De uma chance ! (Por favor, deixe-nos saber como ficou)
UPDATE 2011-10-05 17:49 EDT
Se a tabela for MyISAM e você tiver espaço suficiente na produção e uma janela de tempo de inatividade direta, tente o seguinte:
service mysql restart --skip-networking
Em uma sessão OS / SSH separada, faça uma cópia da tabela
+1 para uma resposta engenhosa! No entanto, não tentarei fazer com que você saiba como ficou a pergunta, pois a pergunta se refere a um script de atualização para todos os bancos de dados de produção ao vivo do meu cliente ;-) No entanto, posso tentar isso em um ambiente de desenvolvimento apenas para se divertir. Mas com esse aviso, eu nunca executaria isso na produção!
Josh
3
Uma solução simples seria:
1- adicione uma nova coluna:
ALTER TABLE `table` ADD `enum2` ENUM('First value', 'Second value') NOT NULL AFTER `enum`;
2- Copie o valor da coluna para enum2 com substituições:
UPDATE `table` SET enum2=REPLACE(`column`, "value_one", "new value")
3- Solte a coluna column, renomeie enumpara column.
OBSERVAÇÃO : nesta pergunta, em 05/10/2011, minha solução é válida para MYSQL 4.1 e mais recente (AFAIK)
Embora isso pareça uma boa solução (e não tão estressante quanto a resposta aceita!), Vale a pena notar que a etapa 3 exige pelo menos uma ALTER TABLEdeclaração, e o OP estava procurando por algo que exigisse apenas uma. Novamente, dito isso, parece uma solução sólida e perfeitamente padrão.
Uma solução simples seria:
1- adicione uma nova coluna:
ALTER TABLE `table` ADD `enum2` ENUM('First value', 'Second value') NOT NULL AFTER `enum`;
2- Copie o valor da coluna para enum2 com substituições:
UPDATE `table` SET enum2=REPLACE(`column`, "value_one", "new value")
3- Solte a coluna
column
, renomeieenum
paracolumn
.OBSERVAÇÃO : nesta pergunta, em 05/10/2011, minha solução é válida para MYSQL 4.1 e mais recente (AFAIK)
fonte
ALTER TABLE
declaração, e o OP estava procurando por algo que exigisse apenas uma. Novamente, dito isso, parece uma solução sólida e perfeitamente padrão.