2011-09-22 64 views
15

ENUMの値が表されているすべての行で、ENUMの値を変更することが可能かどうかは、よくテーブル全体でMySQL ENUM値の値を変更する

+0

更新ステートメントを使用しますか? 'UPDATE table1 SET enum1 = 'male' WHERE enum1 = 'female'' – Johan

+1

@Johan - それは問題を起こさないでしょうか?私は 'ENUM'値自体を変更するために' ALTER'を使う前にそれをやらなければならないと思います。しかしそれは許されるだろうか?私は、指定された値だけが列挙型列で選択できると考えたので、私は疑問に思いますか?そして、新しい値がまだ指定されていない場合... – stefmikhail

+2

最初に変更してから更新すると、 'create table' /' alter table'文で設定されていない値にenumを設定することはできません。 – 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

あなたは自動的にデータベースを通過し、必要な変更を加えると思いますか?私は別の方法は、新しいENUM値をセットに追加するために 'ALTER'を使用し、古い値のテーブル内のインスタンスを新しい値で置き換えるために' UPDATE'を使用することであると考えていました。最後に 'ALTER'を使って古い' ENUM'値を削除してください。それがうまくいくと思いますか? – stefmikhail

+0

enumは実際にフィールドに文字列を格納するのではなく、列挙型の値を保持する最小の整数(通常はtinyint)を使用します。列挙型のmysqlで文字列を変更すると、多くの場合、行は – Johan

+0

に何もする必要はありません。 – stefmikhail

関連する問題