2013-03-26 63 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