2011-09-22 19 views
15

Bir tablo boyunca bir ENUM değerini değiştirmek mümkün olup olmadığını merak ediyorum, böylece belirtilen ENUM değerinin gösterildiği tüm satırlarda, değişiklik iyi.Tablo Boyunca MySQL ENUM Değerinin Değerini Değiştirme

+0

Bir güncelleştirme bildirimi kullanın? UPDATE table1 SET enum1 = 'male' WHERE enum1 = 'female'' – Johan

+1

@Johan - Ve bu herhangi bir soruna neden olmaz mı? Sanırım, 'ENUM' değerinin kendisini değiştirmek için 'ALTER' kullanılmadan önce yapılması gerekecek. Ama izin verilir mi? Merak ediyorum, enum sütununda sadece belirtilen değerlerin seçilmesine izin verildiğini düşündüm. Ve eğer yeni değer henüz belirtilmemişse ... – stefmikhail

+2

Önce bir değişiklik yapın ve sonra güncellemeyi yapın, enum 'create table'/'alter table' deyiminde ayarlanmamış bir değere ayarlayamazsınız. – Johan

cevap

25

Eğer bir enum değeri değiştirmek isterseniz:

ENUM('English', 'Spanish', 'Frenchdghgshd', 'Chinese', 'German', 'Japanese') 

kullanımının değiştirmek için: Eski enum oldu varsayalım

-- 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 muhtemelen tüm geçeceği

Masanızdaki satırları güncellemeye çalışırken, bunun etrafında planlanmış bir optimizasyon hikayeleri duydum, ancak bunun gerçekten gerçekleşip gerçekleşmediğinden emin değilim.

+0

Yani, MySQL'in otomatik olarak veritabanından geçeceğini ve herhangi bir değişikliğe ihtiyaç duyduğunu düşünüyorsunuz? Başka bir yöntemin "ALTER" değerini kullanmak için * yeni 'ENUM 'değerine * eklenmesi, sonra da eski değerin tablosundaki herhangi bir örneği yeni değerle değiştirmek için' UPDATE' kullanması olduğunu düşünmekteydim. Son olarak, eski 'ENUM' değerini silmek için 'ALTER' kullanın. Bunun işe yarayacağını düşünüyor musun? – stefmikhail

+0

Bir enum, alanı bir dizgede saklamıyor, yalnızca minik değerler olan enum değerlerini tutacak en küçük tamsayıyı kullanıyor. Dizeleri bir enum mysql olarak değiştirirseniz, zaman zaman – Johan

+0

satırına herhangi bir şey yapmak zorunda kalmaz, bu nedenle sadece bir tamsayıyla ilişkilendirir? – stefmikhail

İlgili konular