2013-03-01 7 views
9

मेरे पास एक सारणी है जहां मुझे दो आईडी को किसी अन्य तालिका से स्टोर करने की आवश्यकता है। कुछ डीबगिंग करते समय मैंने एसक्यूएल के कुछ अजीब व्यवहार को देखा।अप्रत्याशित INSERT ... SET क्वेरी व्यवहार

गलत एसक्यूएल का उदाहरण:

INSERT INTO follower_list set `followerUserId` = '3' AND `followingUserid` = '4' 

ऊपर क्वेरी शून्य डालने गया था डीबी में मूल्य के रूप में है। मैंने क्वेरी को करीब से पढ़ा और महसूस किया कि मैंने , के स्थान पर and डालने की गलती की है। मेरे उद्देश्य को पूरा करने के लिए मुझे आवश्यक वास्तविक क्वेरी है:

INSERT INTO table SET col1 = '3' , col2 = '4' 

जो मैंने अपेक्षा की थी। मेरा प्रश्न पहली (गलत) क्वेरी से संबंधित है - चूंकि इसे निष्पादित किया गया है और सिंथैक्टिक रूप से सही है, इस तरह के प्रश्न कहां इस्तेमाल किए जाएंगे?

उत्तर

11

कारण है कि INSERT बयान सिंटेक्स त्रुटि उत्पन्न नहीं करता है और यह भी काम कर रहा है क्योंकि MySQL परोक्ष (एक बात मैं में MySQL :D पसंद नहीं है) बूलियन अभिव्यक्ति के रूप में बयान को पार्स करता है।

अपने INSERT बयान में केवल followerUserId स्तंभ updatable है, क्योंकि बाकी बूलियन अभिव्यक्ति का हिस्सा हैं।

INSERT INTO follower_list SET followerUserId = ('3' and (followingUserid='4')) 

यहाँ: क्वेरी के रूप में मूल्यांकन किया गया था

followerUserId = ('3' and (followingUserid='4')) // assuming followingUserid <> 4 
followerUserId = ('3' and (0)) 
followerUserId = 0 

एक और,

followerUserId = ('3' and (followingUserid='4')) // assuming followingUserid = 4 
followerUserId = ('3' and (1)) 
followerUserId = 1  // will only return zero if one of the values is zero 
+1

आप श्रीमान एसक्यूएल के जॉन स्कीट हैं .. अद्भुत ज्ञान। –

+0

धन्यवाद @ जेडब्ल्यू आज मैं 'एसईटी' और' और' के साथ 'सम्मिलित करें' भी सीखता हूं :) –

+0

@ योगेश सुथर यह mysql में 'INSERT' का पुराना वाक्यविन्यास है। –

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