Могу ли я переименовать значения в столбце MySQL ENUM в одном запросе?
12
Предположим, у меня есть таблица базы данных с ENUM('value_one','value_two'). Я хочу изменить это на ENUM('First value','Second value'). В настоящее время я делаю это следующим образом:
Техника, которую мы собираемся продемонстрировать, не поддерживается, не имеет документов и может не работать. Используйте это на свой риск. Мы советуем вам сначала сделать резервную копию ваших данных!
Попробуйте! (Пожалуйста, дайте нам знать, как это получилось)
ОБНОВЛЕНИЕ 2011-10-05 17:49 EDT
Если таблица - MyISAM, и у вас достаточно места на рабочем месте и окно простоя, попробуйте следующее:
service mysql restart --skip-networking
В отдельной сессии OS / SSH сделайте копию таблицы
+1 за гениальный ответ! Я не буду, однако, давать этому попытку и сообщать вам, как это получилось, поскольку вопрос касается сценария обновления для всех действующих, производственных баз данных моего клиента ;-) Однако я могу попробовать это в среде разработки просто ради забавы. Но с этим предупреждением я бы никогда не запустил это в производство!
Джош
3
Простое решение будет:
1- добавить новый столбец:
ALTER TABLE `table` ADD `enum2` ENUM('First value', 'Second value') NOT NULL AFTER `enum`;
2- Скопируйте значение столбца в enum2 с заменами:
UPDATE `table` SET enum2=REPLACE(`column`, "value_one", "new value")
Хотя это звучит как хорошее решение (и не столь нервное, как принятый ответ!), Стоит отметить, что для шага 3 требуется хотя бы одно ALTER TABLEутверждение, а ОП искала что-то, что требовало только одного. Опять же, это говорит о том, что это кажется совершенно стандартным, твердым решением.
Простое решение будет:
1- добавить новый столбец:
ALTER TABLE `table` ADD `enum2` ENUM('First value', 'Second value') NOT NULL AFTER `enum`;
2- Скопируйте значение столбца в enum2 с заменами:
UPDATE `table` SET enum2=REPLACE(`column`, "value_one", "new value")
3- Удалить столбец
column
, переименоватьenum
вcolumn
.ПРИМЕЧАНИЕ : этот вопрос относится к 2011-10-05, мое решение действительно для MYSQL 4.1 и новее (AFAIK)
источник
ALTER TABLE
утверждение, а ОП искала что-то, что требовало только одного. Опять же, это говорит о том, что это кажется совершенно стандартным, твердым решением.