मेरी समझ से, एक चयन लॉक प्राप्त नहीं करता है और गतिरोध का कारण नहीं होना चाहिए।
हर बार जब आप कोई पंक्ति सम्मिलित/अद्यतन/या हटाते हैं, तो एक लॉक प्राप्त कर लिया जाता है। गतिरोध से बचने के लिए, आपको यह सुनिश्चित करना होगा कि समवर्ती लेनदेन उस क्रम में पंक्ति को अपडेट नहीं करते हैं जिसके परिणामस्वरूप गतिरोध हो सकता है। सामान्यतया, गतिरोध से बचने के लिए आपको हमेशा एक ही क्रम में लॉक प्राप्त करना चाहिए अलग-अलग लेन-देन में भी (उदाहरण के लिए हमेशा पहले टेबल ए, फिर टेबल बी)।
लेकिन अगर एक लेन-देन के भीतर आप केवल एक तालिका में सम्मिलित करते हैं तो यह शर्त पूरी होती है, और इसके बाद आमतौर पर गतिरोध नहीं होना चाहिए। क्या आप लेन-देन में कुछ और कर रहे हैं?
हालांकि अनुपलब्ध अनुक्रमणिका . होने पर गतिरोध उत्पन्न हो सकता है . जब सम्मिलित/अपडेट/डिलीट में एक पंक्ति, डेटाबेस को संबंधपरक बाधाओं की जांच करने की आवश्यकता होती है, अर्थात, सुनिश्चित करें कि संबंध सुसंगत हैं। ऐसा करने के लिए, डेटाबेस को संबंधित तालिकाओं में विदेशी कुंजियों की जांच करने की आवश्यकता है। यह हो सकता है परिणामस्वरूप अन्य लॉक संशोधित पंक्ति की तुलना में प्राप्त किया जा रहा है। सुनिश्चित करें कि हमेशा विदेशी कुंजी (और निश्चित रूप से प्राथमिक कुंजी) पर अनुक्रमणिका होनी चाहिए, अन्यथा इसका परिणाम टेबल लॉक हो सकता है पंक्ति लॉक . के बजाय . यदि टेबल लॉक होता है, तो लॉक विवाद अधिक होता है और गतिरोध की संभावना बढ़ जाती है।
सुनिश्चित नहीं है कि आपके मामले में वास्तव में क्या होता है, लेकिन शायद यह मदद करता है।