MySQL में एक विशिष्ट कॉलम के बाद कई कॉलम जोड़ना


361

मुझे एक तालिका में कई कॉलम जोड़ने की आवश्यकता है लेकिन कॉलम नामक कॉलम के बाद स्थिति lastname

मैंने यह कोशिश की है:

ALTER TABLE `users` ADD COLUMN
(
    `count` smallint(6) NOT NULL,
    `log` varchar(12) NOT NULL,
    `status` int(10) unsigned NOT NULL
) 
AFTER `lastname`;

मुझे यह त्रुटि मिली:

आपके SQL सिंटैक्स में कोई त्रुटि है; lastname7 के पास ') ' के बाद उपयोग करने के लिए सही सिंटैक्स के लिए अपने MySQL सर्वर संस्करण से मेल खाने वाले मैनुअल की जाँच करें


मैं इस तरह एक प्रश्न में AFTER का उपयोग कैसे कर सकता हूं?


5
आप कौन सी बोली बोल रहे हैं? लगता है मेरे लिए mysql है। लेकिन ALTER TABLEवाक्यविन्यास बोलियों के बीच थोड़ा भिन्न होता है।
डेमियन_इन_अनबेलेवर


1
मुझे लगता है कि आपके द्वारा जोड़े जा रहे प्रत्येक कॉलम पर आपको AFTER कीवर्ड की आवश्यकता है। क्या इसका मतलब यह है कि आपको अंतिम कॉलम के बाद सभी 3 की आवश्यकता है या नए कॉलम के अनुसार एक अलग तालिका विवरण, मैं निश्चित रूप से नहीं कह सकता।
Zec

जवाबों:


728

इसे इस्तेमाल करे

ALTER TABLE users
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

वाक्यविन्यास की जाँच करें


6
[ एक अतिरिक्त जानकारी के रूप में एकाधिक] ADD, ALTER, DROP, और CHANGEखंड एक एकल में अनुमति दी जाती है ALTER TABLEबयान अल्पविराम के द्वारा अलग। यह मानक एसक्यूएल के लिए एक MySQL एक्सटेंशन है, जो प्रत्येक तालिका कथन के प्रत्येक खंड में से केवल एक को अनुमति देता है।
informatik01

@ अयप्पन क्या हम एसक्यूएल सर्वर में ऐसा कर सकते हैं?
रोशन

77

यदि आप किसी विशिष्ट फ़ील्ड के बाद एक कॉलम जोड़ना चाहते हैं, तो निम्नलिखित MySQL क्वेरी को काम करना चाहिए:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL
    AFTER lastname

यदि आप कई कॉलम जोड़ना चाहते हैं, तो आपको कॉलम के लिए हर बार 'ADD' कमांड का उपयोग करना होगा। इसके लिए यहाँ MySQL क्वेरी है:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL,
    ADD COLUMN log VARCHAR(12) NOT NULL,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL
    AFTER lastname

ध्यान देने की बात

दूसरी विधि में, अंतिम ADD COLUMN स्तंभ वास्तव में पहला स्तंभ होना चाहिए जिसे आप तालिका में जोड़ना चाहते हैं।

उदाहरण के लिए: आप जोड़ना चाहते हैं count, log, statusके बाद सटीक क्रम में lastname, तो वाक्य रचना वास्तव में होगा:

ALTER TABLE users
    ADD COLUMN log VARCHAR(12) NOT NULL AFTER lastname,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL AFTER lastname,
    ADD COLUMN count SMALLINT(6) NOT NULL AFTER lastname

3
दूसरे संस्करण ने मेरे लिए पूरी तरह से काम किया। मैं MySql 5.5.25 का उपयोग कर रहा हूं।
नॉर्मन

कोड के अंतिम बिट क्रम में स्तंभ जोड़ने करता है count, log, statusया count, status, log?
सरफ़राज़

1
ध्यान दें: यदि आप 'पिछले के बादनाम' को नहीं जोड़ते हैं, तो उस परिवर्तन तालिका सूची में आपके द्वारा लाए गए अंतिम कॉलम में क्रमबद्धता वास्तव में लागू नहीं होती है। इसलिए जब आप ALTER TABLE तालिका ADD COLUMN blah1, ADD COLUMN blah2 करते हैं; (ध्यान दें 'AFTER' क्लॉज), कॉलम blah1 को पहले जोड़ा जाएगा, फिर blah2।
होंगि ली

10

आप कॉमा का उपयोग करके कई कॉलम नामों का उल्लेख नहीं कर सकते ADD COLUMN। आपको ADD COLUMNहर बार एक नए कॉलम को परिभाषित करने की आवश्यकता है ।


4
मैंने एक +1 दिया लेकिन यह स्वीकृत जवाब के लिए एक टिप्पणी होनी चाहिए
mjsarfatti

9

यह सही है:

ALTER TABLE `users`
    ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
    ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
    ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

3
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

आप इसे मेरे साथ ठीक काम कर सकते हैं।


1

एक संभावना यह होगी कि तालिका में स्तंभों को पुन: व्यवस्थित करने के बारे में परेशान न करें और केवल कॉलम जोड़कर इसे संशोधित करें। फिर, एक दृश्य बनाएं जिसमें आपके इच्छित कॉलम हैं - यह मानते हुए कि ऑर्डर वास्तव में महत्वपूर्ण है। किसी भी ऑर्डर को प्रतिबिंबित करने के लिए दृश्य आसानी से बदला जा सकता है। चूँकि मैं कल्पना नहीं कर सकता कि क्रम प्रोग्राम अनुप्रयोगों के लिए महत्वपूर्ण होगा, इसलिए दृश्य उन मैनुअल प्रश्नों के लिए पर्याप्त होना चाहिए जहाँ यह महत्वपूर्ण हो सकता है।


4
अगर मैं अपने दो सेंट जोड़ सकता हूं, तो "प्लेसमेंट" चाहे टेबल कॉलम या पंक्तियां हों, सारहीन होना चाहिए। स्प्रेडशीट चीजों को खोजने के लिए स्थान का उपयोग करते हैं, डेटाबेस नहीं करते हैं।
S. पर माइक एस।

1

अन्य तालिका में listingजोड़ें countINT (5), ADD logVARCHAR (200), ADD statusVARCHAR (20) AFD स्टेट

यह अच्छे परिणाम देगा।


0

यह मेरे लिए ठीक काम करता है:

ALTER TABLE 'users'
ADD COLUMN 'count' SMALLINT(6) NOT NULL AFTER 'lastname',
ADD COLUMN 'log' VARCHAR(12) NOT NULL AFTER 'count',
ADD COLUMN 'status' INT(10) UNSIGNED NOT NULL AFTER 'log';

वोट प्राप्त करने के लिए एक टिप्पणी चोरी। उस दोस्त मत करो।
एमबीउमैन


0

वैकल्पिक रूप से:

ALTER TABLE users
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `lastname`,
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`;

AFTER स्टेटमेंट को सुव्यवस्थित करते हुए अपने इच्छित क्रम में रख देंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.