2011-09-22 16 views
15

Zastanawiam się, czy można zmienić wartość ENUM w tabeli, tak aby we wszystkich wierszach, w których wspomniana jest wartość ENUM, zmiana została dokonana jako dobrze.Zmiana wartości wartości ENUM MySQL, w całej tabeli

+0

Użyj instrukcji aktualizacji? 'UPDATE table1 SET enum1 = 'male' GDZIE enum1 = 'female'' – Johan

+1

@Johan - A to nie przysporzy żadnych problemów? Zgaduję, że musiałoby się to dokonać przed użyciem 'ALTER', aby zmienić samą wartość" ENUM ". Ale czy byłoby to dozwolone? Zastanawiam się, bo myślałem, że tylko określone wartości mogły zostać wybrane w kolumnie wyliczeniowej? A jeśli nowa wartość nie została jeszcze określona ... – stefmikhail

+2

Dokonaj najpierw zmiany, a następnie aktualizacji, nie możesz ustawić wyliczenia na wartość, która nie została ustawiona w instrukcji 'create table' /' alter table'. – Johan

Odpowiedz

25

Jeśli chcesz zmienić wartość wyliczenia:

Załóżmy, że Twój stary enum było:

ENUM('English', 'Spanish', 'Frenchdghgshd', 'Chinese', 'German', 'Japanese') 

to zmienić zastosowanie:

-- Add a new enum value 
ALTER TABLE `tablename` CHANGE `fieldname` `fieldname` ENUM 
('English', 'Spanish', 'Frenchdghgshd', 'Chinese', 'German', 'Japanese', 'French'); 
-- Update the table to change all the values around. 
UPDATE tablename SET fieldname = 'French' WHERE fieldname = 'Frenchdghgshd'; 
-- Remove the wrong enum from the definition 
ALTER TABLE `tablename` CHANGE `fieldname` `fieldname` ENUM 
('English', 'Spanish', 'Chinese', 'German', 'Japanese', 'French'); 

MySQL będzie prawdopodobnie przejść przez wszystko wiersze w twoim stole próbują uaktualnić rzeczy, słyszałem historie o planowanej optymalizacji wokół tego, ale nie jestem pewien, czy tak się rzeczywiście stało.

+0

Myślisz, że MySQL automatycznie przejdzie przez bazę danych i wprowadzi potrzebne zmiany? Myślałem, inną metodą byłoby użycie 'ALTER' do * dodanie * nowej wartości' ENUM' do zestawu, a następnie użycie 'UPDATE' w celu zastąpienia dowolnych wystąpień w tabeli starej wartości, z nową wartością. Następnie użyj "ALTER", aby usunąć starą wartość "ENUM". Myślisz, że to zadziała? – stefmikhail

+0

Wyliczenie naprawdę nie zapisuje ciągu znaków w polu, w którym po prostu używa najmniejszej liczby całkowitej, która będzie zawierać wartości w wyliczeniu, zwykle tinyint. Jeśli zmienisz ciągi znaków w wyliczaniu mysql, często czas nie musi nic robić w wierszu – Johan

+0

, więc po prostu kojarzy go przez liczbę całkowitą? – stefmikhail