MySQL INSERT INTO टेबल वैल्यूज़ .. बनाम INSERT INTO टेबल सेट


252

मुख्य अंतर क्या है INSERT INTO table VALUES ..और INSERT INTO table SET?

उदाहरण:

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

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

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


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

जवाबों:


195

जहाँ तक मैं बता सकता हूँ, दोनों वाक्यविन्यास बराबर हैं। पहला SQL मानक है, दूसरा MySQL का विस्तार है।

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

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

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


4
आप कई मूल्यों का उपयोग कैसे करते हैं INSERT INTO table SET? क्या यह भी संभव है?
pixelfreak

2
आपका क्या अर्थ है? ओपी ने SET a = 1, b = 2, c = 3 का उदाहरण दिया है, जो मेरी समझ में एक से अधिक मूल्य हैं।
विंको वर्सालोविच

9
मेरा मतलब था, कई पंक्तियों को सम्मिलित करें। जैसे: INSERT INTO टेबल (ए, बी, सी) वाल्व (1,2,3), (4,5,6), (7,8,9);
Pixelfreak

5
केवल INSERT बयान जो VALUES सिंटैक्स का उपयोग करते हैं, कई पंक्तियों को सम्मिलित कर सकते हैं।
विंको वर्सालोविच

8
@VinkoVrsalovic, सही नहीं है, कई पंक्तियों के चयन के दौरान कई पंक्तियों को सम्मिलित करते हुए चयन भी कर सकते हैं
Pacerier

15

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

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

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

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

8
@Pacerier मुझे यकीन नहीं है कि मैं आपकी बात देख सकता हूँ? क्या समय बर्बाद किया? एक लाभ है, जो पहले ही बताया जा चुका है: आपको अपने INSERT स्टेटमेंट को बनाने के लिए केवल एक बार कुंजी / मान युग्मों की एक सरणी पर लूप की आवश्यकता है, दो बार के बजाय आपको VALUES सिंटैक्स का उपयोग करने की आवश्यकता होगी, जो छोटी, स्पष्ट होती है , और तेजी से लिखने के लिए कोड।
मार्क अमेरी

@ मार्की लेकिन इस ओरेकल ट्रिक का वह लाभ नहीं है । आप पहले सभी कॉलमों का नाम लेते हैं, फिर सभी मानों का।
हॉब्स

12
@Pacerier यह एक उचित बिंदु है, और तौला जा करने के लिए एक व्यापार है। सुविधा के खिलाफ आपके पास पोर्टेबिलिटी की समस्या है और समय INSERT ... SET ...और बीच के अंतर पर शोध करना व्यर्थ है INSERT ... VALUES ...। फीचर के लिए आपके पास कम, तेज-से-लिखने वाला कोड, बढ़ी हुई पठनीयता, और आपके VALUESक्लॉज लिखते समय आपके कॉलम ऑर्डर को मिलाने के कारण होने वाले टाइपोस का खात्मा । मेरा पेट मुझे बताता है कि नेट पर अच्छे बुरे को मात देता है, लेकिन आपका निर्णय अलग हो सकता है।
मार्क अमेरी

4

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

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