2011-11-17 10 views
6

क्या कोई मुख्य परिवर्तन किए बिना इनो डीबी तालिका पर कॉलम का नाम बदलने का कोई तरीका है?MySQL तालिका को पुनर्निर्मित किए बिना कॉलम नाम बदलें

तालिका बहुत बड़ी है और मैं प्रमुख डाउनटाइम से बचना चाहता हूं।

+2

बस ALTER का वाक्यविन्यास देखें। –

उत्तर

6

कॉलम का नाम बदलना (ALTER TABLE ... CHANGE COLUMN के साथ) दुर्भाग्य से MySQL को पूर्ण तालिका प्रतिलिपि चलाने की आवश्यकता है।

pt-online-schema-change देखें। यह आपको ALTER की अवधि के लिए पूरी तालिका को लॉक किए बिना किसी तालिका में कई प्रकार के ALTER परिवर्तन करने में मदद करता है। जब आप डेटा को नई तालिका में कॉपी करते हैं तो आप मूल तालिका को पढ़ और लिखना जारी रख सकते हैं। परिवर्तनों को कैप्चर किया जाता है और ट्रिगर्स के माध्यम से नई तालिका में लगाया जाता है।

उदाहरण:

pt-online-schema-change h=localhost,D=databasename,t=tablename \ 
    --alter 'CHANGE COLUMN oldname newname NUMERIC(9,2) NOT NULL' 

अद्यतन: MySQL 5.6 तालिका के पुनर्निर्माण, और एक स्तंभ का नाम बदले बिना ALTER आपरेशन के कुछ प्रकार के कर सकते हैं एक ऑनलाइन परिवर्तन के रूप में समर्थन किया उन में से एक है । http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html देखें कि किस प्रकार के बदलाव करते हैं या इसका समर्थन नहीं करते हैं।

0

यदि इसमें कोई बाधा नहीं है, तो आप इसे बिना किसी परेशानी के बदल सकते हैं। यदि आपको पहले बाधाओं को दूर करना होगा, तो बाधाओं को वापस बदलें और जोड़ें।

0

कई पंक्तियों वाली एक तालिका को बदलने में काफी समय लग सकता है (हालांकि यदि शामिल कॉलम अनुक्रमित नहीं हैं, तो यह मामूली हो सकता है)।

आप विशेष रूप से ALTER TABLE वाक्य रचना उस उद्देश्य के लिए विशेष रूप से बनाई गई का उपयोग कर से बचना चाहते हैं, तो आप हमेशा लगभग ठीक उसी संरचना (लेकिन अलग नाम) के साथ एक मेज बना सकते हैं और इतने की तरह इसे में सभी डेटा की प्रतिलिपि,:

CREATE TABLE `your_table2` ...; 
    -- (using the query from SHOW CREATE TABLE `your_table`, 
    -- but modified with your new column changes) 

LOCK TABLES `your_table` WRITE; 
INSERT INTO `your_table2` SELECT * FROM `your_table`; 
RENAME TABLE `your_table` TO `your_table_old`, `your_table2` TO `your_table`; 

कुछ वैकल्पिक तालिका प्रश्नों के लिए, उपरोक्त थोड़ा तेज़ हो सकता है। हालांकि, एक साधारण कॉलम नाम बदलने के लिए, यह मामूली हो सकता है। मैं यह देखने के लिए कि आप वास्तव में कितना समय देख रहे हैं, मैं एक समान तालिका बनाने और उस पर परिवर्तन करने का प्रयास कर सकता हूं।

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