2013-03-26 13 views
34

Ho una tabella MySQL "content" che ha una colonna page_type di tipo ENUM. I valori ENUM sono NEWS & PRESS_RELEASE. Ho bisogno di sostituire NEWS con FEATURED_COVERAGE:MySQL Modifica una colonna valore ENUM

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

Ma ora i record nella tabella, che in precedenza aveva page_type NEWS sono ormai vuoto, e non c'è modo che io possa identificare quali record sono NEWS, in modo che posso rinomina quelli a FEATURED_COVERAGE.

Come risolvere tali problemi?

+0

Cosa u want? rinominare un valore enum esistente con un nuovo valore enum o aggiungere un nuovo valore enum? Non è chiaro nella tua domanda. –

+0

rinomina un valore enum esistente. –

risposta

65

Se ho capito la tua domanda, si desidera rinominare il valore enum esistente NEWS-FEATURED_COVERAGE. Se è così, è necessario seguire i passaggi qui sotto,

  1. Modificare la tabella e aggiungere il nuovo valore enum alla colonna, in modo che si avrà 3 enumerazioni

    ALTER TABLE `content` CHANGE `pagetype` `pagetype` 
    ENUM('FEATURED_COVERAGE','PRESS_RELEASE', 'NEWS') CHARACTER SET utf8 
    COLLATE utf8_general_ci NOT NULL; 
    
  2. Impostare il vecchio valore enum a nuovo valore per tutti i record.

    UPDATE `content` set `pagetype` = 'FEATURED_COVERAGE' where 
    `pagetype` = 'NEWS'; 
    
  3. Modificare la tabella e rilasciare il vecchio valore enum.

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

UPDATE TABLE 'content' ... dovrebbe essere UPDATE' content' ... –

+0

@PrimozRome, aggiornato. Grazie –

5

L'enum di MySQL ha sempre un'opzione nascosta che è 0 come intero e '' come stringa. Quando si tenta di assegnare un valore non valido, viene utilizzato quello nascosto.

Assumendo tutti i valori vuoti erano 'NOVITA' prima che l'aggiornamento è possibile cambiare con

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

Penso di default potrebbe avere contribuito.

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

Ora si devono ciecamente ad un aggiornamento

e non usare mai una colonna enum se il valore impostato sta cambiando.

1

Dal momento che è stata modificata solo un'enum non sarà difficile per voi

Provare ad usare questa

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

non funziona questa query – sk11z00

Problemi correlati