我有一个MySQL表" content
",其中有一个列page_type
类型的ENUM
。ENUM
值为NEWS
&PRESS_RELEASE
。我需要用FEATURED_COVERAGE
替换NEWS
:
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
。
如何解决这些问题?
如果我理解您的问题,您要将现有的enum值NEWS
重命名为FEATURED_COVERAGE
。如果是,您需要遵循以下步骤,
-
修改表并将新的枚举值添加到列中,这样您将有3个枚举
ALTER TABLE `content` CHANGE `pagetype` `pagetype` ENUM('FEATURED_COVERAGE','PRESS_RELEASE', 'NEWS') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
-
将所有记录的旧枚举值设置为新值。
UPDATE `content` set `pagetype` = 'FEATURED_COVERAGE' where `pagetype` = 'NEWS';
-
修改表并删除旧的enum值
ALTER TABLE `content` CHANGE `pagetype` `pagetype` ENUM('FEATURED_COVERAGE','PRESS_RELEASE') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
MySQL的enum总是有一个隐藏选项,0作为整数,"作为字符串。当您尝试分配一个无效的值时,它会使用隐藏的值。
假设你所有的空值在更新之前都是'NEWS',你可以用
来改变它们UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0
我想默认可能有帮助。
ALTER TABLE `content`
CHANGE `pagetype` `pagetype` ENUM('FEATURED_COVERAGE','PRESS_RELEASE')
CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULt 'FEATURED_COVERAGE';
现在你必须盲目地更新
如果您的值集正在更改,则永远不要使用enum列。
由于您只更改了一个enum,因此对您来说这并不困难
尝试使用这个
UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0
ALTER TABLE name_table
CHANGE name_column name_column enum ('make','value', 'enum','again');