2009-05-14 13 views
195

INSERT INTO table VALUES .. और INSERT INTO table SET के बीच मुख्य अंतर क्या है?टेबल VALUES में MySQL INSERT .. तालिका में INSERT बनाम सेट

उदाहरण:

INSERT INTO table (a, b, c) VALUES (1,2,3) 

INSERT INTO table SET a=1, b=2, c=3 

और क्या इन दोनों के प्रदर्शन के बारे में?

+9

कोड पूर्ण और मैककनेल के पठनीयता पर निरंतर जोर पढ़ने के बाद, यह दुर्भाग्यपूर्ण लगता है कि 'तालिका सेट में प्रवेश' मानक नहीं है। यह बहुत स्पष्ट लगता है। मुझे लगता है कि मुझे 'INSERT INTO तालिका ([कॉलम नाम, कॉलम नाम बी]) VALUES ([' value a ',' value b ']) का उपयोग करना होगा, फिर भी अगर मैं पोर्ट बंद कर दूं तो खुद को परेशानी से बचाने के लिए पोस्टग्रेज़ के लिए। – cluelesscoder

+0

यह प्रश्न कन्या के वीडियो की तरह वायरल चला गया है! – aMazing

उत्तर

156

जहां तक ​​मैं कह सकता हूं, दोनों वाक्यविन्यास समकक्ष हैं। पहला एसक्यूएल मानक है, दूसरा MySQL का एक्सटेंशन है।

तो वे बिल्कुल समान प्रदर्शन के अनुसार होना चाहिए।

http://dev.mysql.com/doc/refman/5.6/en/insert.html का कहना है:

सम्मिलित एक मौजूदा तालिका में नई पंक्तियाँ सम्मिलित करता है। INSERT ... मूल्य और INSERT ... स्पष्ट रूप से निर्दिष्ट मानों के आधार पर कथन सम्मिलित पंक्तियों के सेट फॉर्म। INSERT ... किसी अन्य तालिका या तालिकाओं से चुने गए पंक्तियों को चुनें।

+3

'तालिका सेट में INSERT' का उपयोग करके आप एकाधिक मानों को कैसे सम्मिलित करते हैं? क्या यह भी संभव है? – pixelfreak

+2

आपका क्या मतलब है? उदाहरण ओपी ने एसईटी ए = 1, बी = 2, सी = 3 कहा है जो मेरी समझ में कई मान हैं। –

+6

मेरा मतलब था, एकाधिक पंक्तियों को INSERT। पसंद: तालिका में प्रवेश (ए, बी, सी) मूल्य (1,2,3), (4,5,6), (7,8,9); – pixelfreak

13

मुझे लगता है कि विस्तार आवेषण और अद्यतनों के लिए समान वाक्यविन्यास की अनुमति देना है। ओरेकल में, इतने ही वाक्य-चाल है:

UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual) 
+1

मुझे लगता है कि एक्सटेंशन हल होने से अधिक समस्याएं पैदा करता है। – Pacerier

+4

@Pacerier जैसे? एकमात्र समस्या जो मैं देखता हूं वह एक पोर्टेबिलिटी है (जो, कई संदर्भों में वास्तव में कोई फर्क नहीं पड़ता); क्या मैं कुछ भूल रहा हूँ? –

+1

@ मार्क आर्मरी, हाँ जब आप इसे देखते हैं, तो कोई वास्तविक लाभ नहीं होता है। नुकसान ** अनावश्यक समय बर्बाद ** है, इस धागे का पूरा अस्तित्व मेरे बिंदु को साबित करता है। – Pacerier

0

वाक्यविन्यास के बाद से बराबर हैं (MySQL किसी भी तरह में), मैं, INSERT INTO table SET x=1, y=2 वाक्य रचना पसंद करते हैं क्योंकि यह संशोधित करने के लिए आसान और आसान है बयान में त्रुटियों को पकड़ने के लिए, खासकर जब बहुत सारे कॉलम डालना यदि आपको 10 या 15 या अधिक कॉलम डालना है, तो मेरी राय में (x, y) VALUES (1,2) सिंटैक्स का उपयोग करके कुछ मिश्रण करना वास्तव में आसान है।

यदि विभिन्न SQL मानकों के बीच पोर्टेबिलिटी एक समस्या है, तो शायद INSERT INTO table (x, y) VALUES (1,2) को प्राथमिकता दी जाएगी।

और यदि आप एक ही क्वेरी में एकाधिक रिकॉर्ड डालना चाहते हैं, तो ऐसा लगता है कि INSERT INTO ... SET वाक्यविन्यास काम करेगा, जबकि दूसरा होगा। लेकिन अधिकांश व्यावहारिक मामलों में, आप किसी भी तरह से सम्मिलित करने के लिए रिकॉर्ड्स के सेट के माध्यम से लूपिंग कर रहे हैं, हालांकि कुछ ऐसे मामले हो सकते हैं जहां एक प्रश्न में तालिका में पंक्तियों का एक गुच्छा डालने के लिए एक बड़ी क्वेरी का निर्माण हो, बनाम एक क्वेरी प्रत्येक पंक्ति में प्रदर्शन में सुधार हो सकता है। वास्तव में नहीं पता।

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