MySQL更改列ENUM值

dly7yett  于 2022-11-28  发布在  Mysql
关注(0)|答案(5)|浏览(235)

我有一个MySQL表“content“,其中有一个类型为ENUM的列page_typeENUM的值为NEWSPRESS_RELEASE。我需要将NEWS替换为FEATURED_COVERAGE

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
如何解决此类问题?

xeufq47z

xeufq47z1#

如果我理解您的问题,您希望将现有枚举值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;

1.将所有记录的旧枚举值设置为新值。

UPDATE `content` set `pagetype` = 'FEATURED_COVERAGE' where
`pagetype` = 'NEWS';

1.更改表并删除旧的枚举值。

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

yeotifhr2#

MySQL的枚举总是有一个隐藏的选项,它是0作为整数和''作为字符串。当你试图分配一个无效的值时,它会使用隐藏的值。
假设在更新之前所有空值都是“NEWS”,您可以使用

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

o0lyfsai3#

我认为违约可能会有所帮助。

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

现在你必须盲目地进行一次更新
如果您的值集正在更改,则永远不要使用枚举列。

ygya80vv

ygya80vv4#

由于您只更改了一个枚举,因此这对您来说并不难
尝试使用此

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

y1aodyip5#

ALTER TABLE name_table
CHANGE name_column name_column enum ('make','value', 'enum','again');

相关问题