2011-09-22 190 views
15

我想知道是否有可能在整个表中更改ENUM值,以便在表示ENUM值的所有行中,将更改设置为好。在整个表中更改MySQL枚举值的值

+0

使用更新声明? 'UPDATE table1 SET enum1 ='male'WHERE enum1 ='female'' – Johan

+1

@Johan - 那会不会导致任何问题?我猜在使用'ALTER'来改变'ENUM'值本身之前就必须完成。但是会被允许吗?我想知道是因为我认为只允许在枚举列中选择指定的值?如果尚未指定新值... – stefmikhail

+2

先执行alter,然后执行更新,则不能将枚举设置为未在“create table”/“alter table”语句中设置的值。 – Johan

回答

25

如果你想改变一个枚举值:

假设你的旧枚举是:

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可能会经历所有表中的行试图更新内容,我听说过有关计划优化的故事,但我不确定是否真的发生了。

+0

所以你认为MySQL会自动通过数据库并进行所需的更改?我想另一种方法是使用'ALTER' *将新的'ENUM'值添加到集合中,然后使用'UPDATE'将新值的表中的任何实例替换为新值。最后,使用'ALTER'来删除旧的'ENUM'值。你认为这会起作用吗? – stefmikhail

+0

enum并不真正在字段中存储字符串,它只是使用将保存enum中的值的最小整数,通常是tinyint。如果你改变一个枚举mysql中的字符串,通常时间不必对 – Johan

+0

行做任何事情,所以它只是通过一个整数关联它? – stefmikhail