在整个表中更改MySQL枚举值的值

在整个表中更改MySQL枚举值的值,mysql,database-design,enums,Mysql,Database Design,Enums,我想知道是否可以在整个表中更改ENUM值,以便在表示所述ENUM值的所有行中也进行更改。如果要更改枚举值: 假设您的旧枚举是: ENUM('English', 'Spanish', 'Frenchdghgshd', 'Chinese', 'German', 'Japanese') 要更改该用途,请执行以下操作: -- Add a new enum value ALTER TABLE `tablename` CHANGE `fieldname` `fieldname` ENUM ('E

我想知道是否可以在整个表中更改
ENUM
值,以便在表示所述
ENUM
值的所有行中也进行更改。

如果要更改枚举值:

假设您的旧枚举是:

ENUM('English', 'Spanish', 'Frenchdghgshd', 'Chinese', 'German', 'Japanese') 
要更改该用途,请执行以下操作:

--  Add a new enum value
ALTER TABLE `tablename` CHANGE `fieldname` `fieldname` ENUM   
('English', 'Spanish', 'Frenchdghgshd', 'Chinese', 'German', 'Japanese', 'French');
-- Update the table to change all the values around.
UPDATE tablename SET fieldname = 'French' WHERE fieldname = 'Frenchdghgshd';
-- Remove the wrong enum from the definition
ALTER TABLE `tablename` CHANGE `fieldname` `fieldname` ENUM   
('English', 'Spanish', 'Chinese', 'German', 'Japanese', 'French');

MySQL可能会遍历您表中的所有行,试图更新内容,我听说过有计划的优化的故事,但我不确定这是否真的发生了

使用更新语句
updatetable1 SET enum1='male',其中enum1='female'
@Johan-这不会引起任何问题吗?我猜在使用
ALTER
更改
ENUM
值本身之前,必须先执行此操作。但这是允许的吗?我想知道,因为我认为在枚举列中只允许选择指定的值?如果还没有指定新的值…先做一个alter,然后再进行更新,您不能将枚举设置为
create table
/
alter table
语句中未设置的值。那么您认为MySQL会自动遍历数据库并进行任何必要的更改吗?我在想另一种方法是使用
ALTER
将新的
ENUM
值添加到集合中,然后使用
UPDATE
将旧值表中的任何实例替换为新值。最后,使用
ALTER
删除旧的
ENUM
值。你认为这样行吗?枚举并不真的在字段中存储字符串,它只使用保存枚举中值的最小整数,通常是tinyint。如果更改枚举mysql中的字符串,则时间不必对行YEP做任何更改,尽管如果更改枚举的顺序,mysql也将进入所有行并重新排列字段中的值。因此,如果您有enum('yes','no'),并且
alter table t1更改enum1 enum1 enum('no','yes')
所有的no和yes都将保持不变。抱歉,-1,这不起作用。您必须按照@stefmikhail所说的做,即,
ALTER TABLE
并添加新的
ENUM
值,
UPDATE
并用新的替换旧的,以及再次
ALTER TABLE
以删除旧的枚举值@Johan也许你的例子奏效了,因为
Frenchdghgshd
French
开头,但是如果你把
French
改为
Frankçaise
,你需要两个
ALTER TABLE
和一个
UPDATE
。@Josh,更新了答案,以反映你的输入,谢谢。