2011-09-22 9 views
15

मुझे आश्चर्य है कि एक तालिका में ENUM मान को बदलना संभव है, ताकि ENUM मान कहने वाली सभी पंक्तियों में परिवर्तन किया गया हो, परिवर्तन किया गया है कुंआ।एक MySQL ENUM मान के मान को बदलना, एक तालिका के दौरान

+0

अद्यतन कथन का उपयोग करें? 'अद्यतन तालिका 1 एसईटी enum1 =' पुरुष 'जहां enum1 =' मादा ' – Johan

+1

@ जोहान - और इससे कोई समस्या नहीं होगी? मुझे लगता है कि इसे 'ENUM' मान को बदलने के लिए 'ALTER' के उपयोग से पहले किया जाना होगा। लेकिन क्या इसकी अनुमति होगी? मैं सोच रहा हूं क्योंकि मैंने सोचा था कि एनम कॉलम में केवल निर्दिष्ट मानों को चुना जाना चाहिए? और यदि नया मान अभी तक निर्दिष्ट नहीं किया गया है ... – stefmikhail

+2

पहले परिवर्तन करें और फिर अद्यतन करें, आप उस मान को एक enum सेट नहीं कर सकते हैं जिसे 'तालिका बनाएं'/'तालिका बदलें' कथन में सेट नहीं किया गया है। – Johan

उत्तर

25

आप एक 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 शायद सभी के माध्यम से जाना होगा सामानों को अपडेट करने की कोशिश कर रहे आपकी तालिका में पंक्तियां, मैंने इसके चारों ओर एक योजनाबद्ध अनुकूलन की कहानियां सुनाई हैं, लेकिन मुझे यकीन नहीं है कि वास्तव में ऐसा हुआ है या नहीं।

+0

तो आपको लगता है कि MySQL स्वचालित रूप से डेटाबेस के माध्यम से जाएगा और किसी भी बदलाव की आवश्यकता होगी? मैं सोच रहा था कि सेट में नया 'ENUM' मान' जोड़ने के लिए 'ALTER' * * * का उपयोग करने के लिए एक और तरीका होगा, फिर नए मान के साथ पुराने मान की तालिका में किसी भी उदाहरण को प्रतिस्थापित करने के लिए' UPDATE' 'का उपयोग करें। फिर अंत में, पुराने 'ENUM' मान को हटाने के लिए' ALTER' का उपयोग करें। क्या आपको लगता है यह कार्य करेगा? – stefmikhail

+0

एक enum वास्तव में फ़ील्ड में एक स्ट्रिंग को स्टोर नहीं करता है, यह केवल छोटे पूर्णांक का उपयोग करता है जो enum में मानों को रखता है, आमतौर पर tinyint। यदि आप enumql में स्ट्रिंग्स को बदलते हैं तो अक्सर – Johan

+0

पंक्ति में कुछ भी करने की ज़रूरत नहीं है, तो यह सिर्फ इसे पूर्णांक के माध्यम से संबद्ध करता है? – stefmikhail

संबंधित मुद्दे