Kann ich die Werte in einer MySQL ENUM-Spalte in einer Abfrage umbenennen?
12
Angenommen, ich habe eine Datenbanktabelle mit einem ENUM('value_one','value_two'). Ich möchte das in ein ändern ENUM('First value','Second value'). Ich mache das momentan wie folgt:
Die Technik, die wir demonstrieren möchten, wird nicht unterstützt, ist nicht dokumentiert und funktioniert möglicherweise nicht. Verwenden Sie es auf Ihr Risiko. Wir empfehlen Ihnen, zuerst Ihre Daten zu sichern!
Versuche es ! (Bitte lassen Sie uns wissen, wie es ausgegangen ist)
UPDATE 2011-10-05 17:49 EDT
Wenn es sich bei der Tabelle um MyISAM handelt und Sie über genügend Speicherplatz in der Produktion und ein direktes Ausfallzeitfenster verfügen, versuchen Sie Folgendes:
service mysql restart --skip-networking
Erstellen Sie in einer separaten OS / SSH-Sitzung eine Kopie der Tabelle
+1 für eine geniale Antwort! Ich werde es jedoch nicht versuchen und Sie wissen lassen, wie es sich herausstellte, da sich die Frage auf ein Upgrade-Skript für alle Live-Produktionsdatenbanken meiner Kunden bezieht ;-) Ich kann dies jedoch nur in einer Entwicklungsumgebung versuchen zum Spass. Aber mit dieser Warnung würde ich das nie in der Produktion ausführen!
Josh
3
Eine einfache Lösung wäre:
1- Fügen Sie eine neue Spalte hinzu:
ALTER TABLE `table` ADD `enum2` ENUM('First value', 'Second value') NOT NULL AFTER `enum`;
2- Kopieren Sie den Wert der Spalte mit Ersetzungen in enum2:
UPDATE `table` SET enum2=REPLACE(`column`, "value_one", "new value")
Dies klingt zwar nach einer guten Lösung (und ist bei weitem nicht so nervenaufreibend wie die akzeptierte Antwort!), Aber es ist erwähnenswert, dass für Schritt 3 mindestens eine ALTER TABLEAussage erforderlich ist und das OP nach etwas gesucht hat, für das nur eine erforderlich ist. Auch dies scheint eine vollkommen normale, solide Lösung zu sein.
Eine einfache Lösung wäre:
1- Fügen Sie eine neue Spalte hinzu:
ALTER TABLE `table` ADD `enum2` ENUM('First value', 'Second value') NOT NULL AFTER `enum`;
2- Kopieren Sie den Wert der Spalte mit Ersetzungen in enum2:
UPDATE `table` SET enum2=REPLACE(`column`, "value_one", "new value")
3- Spalte
column
löschen, umbenennenenum
incolumn
.HINWEIS : Diese Frage geht auf den 05.10.2011 zurück. Meine Lösung gilt für MYSQL 4.1 und höher (AFAIK).
quelle
ALTER TABLE
Aussage erforderlich ist und das OP nach etwas gesucht hat, für das nur eine erforderlich ist. Auch dies scheint eine vollkommen normale, solide Lösung zu sein.