2013-03-26 11 views
34

Mam tabelę MySQL "content", który ma kolumnę page_type typu ENUM. Wartości ENUM są następujące: NEWS & PRESS_RELEASE. Muszę wymienić NEWS z FEATURED_COVERAGE:MySQL Zmiana kolumny ENUM wartość

ALTER TABLE `content` CHANGE `pagetype` `pagetype` ENUM('FEATURED_COVERAGE','PRESS_RELEASE') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL; 

Ale teraz rekordy w tabeli, która wcześniej miała page_type NEWS są teraz puste i nie ma możliwości, że mogę określić, które rekordy są NEWS, tak że mogę zmień nazwy na FEATURED_COVERAGE.

Jak rozwiązać takie problemy?

+0

Co u chcą? zmienić nazwę istniejącej wartości wyliczeniowej na nową wartość wyliczeniową lub dodać nową wartość wyliczenia? Nie jest jasne w tobie pytanie. –

+0

Zmień nazwę istniejącej wartości wyliczeniowej. –

Odpowiedz

65

Jeśli rozumiem Twoje pytanie, którego nazwę chcesz zmienić istniejącą wartość enum NEWS do FEATURED_COVERAGE. Jeśli tak, należy postępować zgodnie z poniższymi krokami,

  1. Alter tabelę i dodać nową wartość enum do kolumny, dzięki czemu będziesz mieć 3 stałe teksty

    ALTER TABLE `content` CHANGE `pagetype` `pagetype` 
    ENUM('FEATURED_COVERAGE','PRESS_RELEASE', 'NEWS') CHARACTER SET utf8 
    COLLATE utf8_general_ci NOT NULL; 
    
  2. Ustaw starą wartość enum do nowej wartości dla wszystkich rekordów.

    UPDATE `content` set `pagetype` = 'FEATURED_COVERAGE' where 
    `pagetype` = 'NEWS'; 
    
  3. Zmień tabelę i upuść starą wartość wyliczenia.

    ALTER TABLE `content` CHANGE `pagetype` `pagetype` 
    ENUM('FEATURED_COVERAGE','PRESS_RELEASE') CHARACTER SET utf8 COLLATE 
    utf8_general_ci NOT NULL; 
    
+0

TABELA AKTUALIZACJI 'treść' ... powinna być AKTUALIZUJĄCA' treść' ... –

+0

@PrimozRome, Zaktualizowano. Dzięki –

5

Wyliczenie MySQL zawsze ma ukrytą opcję, która jest 0 jako liczba całkowita i "" jako ciąg. Przy próbie przypisania niepoprawnej wartości używa ukrytej.

Zakładając wszystkie puste wartości były „NEWS” przed aktualizacją można zmienić je

UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0 
2

myślę domyślna może pomogły.

ALTER TABLE `content` 
CHANGE `pagetype` `pagetype` ENUM('FEATURED_COVERAGE','PRESS_RELEASE') 
    CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULt 'FEATURED_COVERAGE'; 

Teraz trzeba ślepo do aktualizacji

i nigdy nie używać kolumnę enum, jeśli ustawiona wartość się zmienia.

1

Ponieważ zmieniono tylko jeden enum to nie będzie trudne,

Spróbuj użyć tego

UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0 
+0

nie działa to zapytanie – sk11z00