2013-03-26 810 views
34

我有一個MySQL表「content」,其中有一列page_type類型ENUMENUM的值爲NEWS & PRESS_RELEASE。我需要更換NEWSFEATURED_COVERAGEMySQL更改列ENUM值

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

但現在的表,它早些時候曾PAGE_TYPE NEWS現在是空的,沒有辦法,我可以找出哪些記錄NEWS,記錄讓我可以將它們重命名爲FEATURED_COVERAGE

如何解決此類問題?

+0

ü想什麼?將現有的枚舉值重命名爲新的枚舉值或添加新的枚舉值?不清楚你的問題。 – 2013-03-26 16:51:37

+0

重命名現有的枚舉值。 – 2013-03-26 17:30:44

回答

65

改變他們,如果我理解你的問題,你要對現有枚舉值NEWS重命名爲FEATURED_COVERAGE。如果是這樣,您需要按照下面的步驟,

  1. 改變表和新枚舉值添加到列,因此,你將有3個枚舉

    ALTER TABLE `content` CHANGE `pagetype` `pagetype` 
    ENUM('FEATURED_COVERAGE','PRESS_RELEASE', 'NEWS') CHARACTER SET utf8 
    COLLATE utf8_general_ci NOT NULL; 
    
  2. 將舊枚舉值爲所有記錄創造新的價值。

    UPDATE `content` set `pagetype` = 'FEATURED_COVERAGE' where 
    `pagetype` = 'NEWS'; 
    
  3. 改變表格並刪除舊的枚舉值。

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

UPDATE TABLE'content' ...應該更新'content' ... – 2015-12-28 09:16:41

+0

@PrimozRome,更新。謝謝 – 2015-12-28 12:55:41

5

MySQL的枚舉總是有一個隱藏的選項,它是0作爲整數和''作爲字符串。當你嘗試分配一個無效值時,它使用隱藏的值。

假設你所有的空值在更新前「新聞」,你可以用

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

我覺得默認的可能有幫助。

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

現在你要一味地更新

而且從來沒有,如果你的價值集合改變使用ENUM列。

1

既然你已經改變了只有一個枚舉它不會爲難你

嘗試使用此

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

不起作用此查詢 – sk11z00 2018-03-02 10:49:44