जवाबों:
जहाँ तक मैं बता सकता हूँ, दोनों वाक्यविन्यास बराबर हैं। पहला SQL मानक है, दूसरा MySQL का विस्तार है।
तो वे बिल्कुल बराबर प्रदर्शन बुद्धिमान होना चाहिए।
http://dev.mysql.com/doc/refman/5.6/en/insert.html कहता है:
INSERT एक मौजूदा तालिका में नई पंक्तियाँ सम्मिलित करता है। INSERT ... VALUES और INSERT ... विवरण के सेट स्पष्ट रूप से निर्दिष्ट मानों के आधार पर पंक्तियाँ सम्मिलित करते हैं। INSERT ... किसी अन्य तालिका या तालिकाओं से चयनित पंक्तियाँ सम्मिलित करें का चयन करें।
INSERT INTO table SET
? क्या यह भी संभव है?
मुझे लगता है कि एक्सटेंशन आवेषण और अपडेट के लिए समान सिंटैक्स की अनुमति देने का इरादा है। ओरेकल में, एक समान वाक्यात्मक चाल है:
UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
INSERT ... SET ...
और बीच के अंतर पर शोध करना व्यर्थ है INSERT ... VALUES ...
। फीचर के लिए आपके पास कम, तेज-से-लिखने वाला कोड, बढ़ी हुई पठनीयता, और आपके VALUES
क्लॉज लिखते समय आपके कॉलम ऑर्डर को मिलाने के कारण होने वाले टाइपोस का खात्मा । मेरा पेट मुझे बताता है कि नेट पर अच्छे बुरे को मात देता है, लेकिन आपका निर्णय अलग हो सकता है।
चूंकि वाक्यविन्यास समतुल्य हैं (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
वाक्यविन्यास काम करेगा, जबकि अन्य एक होगा। लेकिन अधिकांश व्यावहारिक मामलों में, आप किसी भी तरह आवेषण करने के लिए रिकॉर्ड के एक सेट के माध्यम से लूपिंग कर रहे हैं, हालांकि कुछ मामले हो सकते हैं जहां एक क्वेरी में पंक्तियों का एक गुच्छा सम्मिलित करने के लिए एक बड़ी क्वेरी का निर्माण हो सकता है, बनाम के लिए एक क्वेरी। प्रत्येक पंक्ति में, प्रदर्शन में सुधार हो सकता है। वास्तव में नहीं पता।
INSERT INTO table SET
मानक नहीं है। यह बहुत स्पष्ट लगता है। मुझे लगता है किINSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
अगर मैं पोस्टग्रैज पर पोर्ट करता हूं तो मुझे अपने आप को परेशानी से बचाने के लिए सिंटैक्स का उपयोग करना होगा ।