2011-05-16 5 views
17

मुझे पता है कि एक कुंजी लॉक एक इंडेक्स में एक कुंजी लॉक करता है। हालांकि, वास्तव में "कुंजी" का क्या अर्थ है?एक कुंजी लॉक वास्तव में किस लॉक को लॉक करता है?

उदाहरण के लिए, यदि मेरे पास उपनाम कॉलम पर एक गैर-क्लस्टर इंडेक्स है और जहां उपनाम = "जोन्स" अपडेट है, तो क्या मैं तालिका में प्रत्येक पंक्ति को प्रभावी रूप से लॉक कर दूंगा जहां उपनाम "जोन्स" है? या सूचकांक उच्च स्तर पर बंद हो जाएगा, "जोन्स" के अलावा उपनामों के साथ पंक्तियों तक पहुंच को रोक देगा?

कारण मैं पूछ लॉक पठन स्तर और पदानुक्रम के बारे में पुस्तकें ऑनलाइन में इस नोट है:

कुंजी: serializable लेनदेन में महत्वपूर्ण सीमाओं की रक्षा के लिए प्रयोग किया जाता है एक सूचकांक के भीतर एक पंक्ति ताला।

इससे पता चलता है कि चाबियों की एक श्रृंखला लॉक हो जाएगी, केवल एक ही नहीं।

+0

क्या "धारावाहिक लेनदेन" का अर्थ है कि लेनदेन अलगाव स्तर "धारावाहिक" पर सेट है? क्योंकि जब मैंने एक डेडलॉक डीबग किया तो मैंने "रीड प्रतिबद्ध" अलगाव स्तर में प्रमुख ताले देखा। – kolobok

उत्तर

28

एक कीलॉक सभी पंक्तियों को प्रभावित करता है जो दिए गए अनुमान (प्रकार) से मेल खाते हैं - आपके उदाहरण में surname = 'Jones' के साथ सभी पंक्तियां प्रभावित होंगी।

शब्द "रेंज" का उपयोग किया जाता है क्योंकि भविष्यवाणी के आधार पर पंक्तियों की एक श्रृंखला प्रभावित हो सकती है, उदाहरण के लिए यदि भविष्यवाणी age > 18 थी तो सभी पंक्तियां 18 वर्ष से अधिक आयु से प्रभावित होंगी।


यह भी समझना होगा कि एक कुंजी लॉक बस व्यक्तिगत रूप से सूचकांक में प्रत्येक मिलान पंक्ति ताला लगा नहीं है महत्वपूर्ण है - अपने उदाहरण न केवल कीलॉक उपनाम के साथ "जोन्स" सूचकांक में सभी मौजूदा पंक्तियों को प्रभावित करता है, यह भी प्रभावित करता है मौजूदा पंक्ति को संशोधित करने या उपनाम "जोन्स" के साथ एक नई पंक्ति डालने का कोई प्रयास।

यह एक अलग तरह से ताले के बारे में सोचने के लिए मदद कर सकते हैं - जब एसक्यूएल सर्वर एक और ताला जो हो सकता है प्राप्त करने का प्रयास ताले केवल एक प्रभाव हो असंगत (यानी यह एक ही समय में दोनों ताले के लिए वैध नहीं है)। उदाहरण के लिए यदि आपके पास age > 18 के साथ पंक्तियों पर एक विशेष कुंजी-लॉक है और age = 42 के साथ पंक्ति डालने या संशोधित करने का प्रयास करें तो SQL सर्वर पहले रिलांट लॉक प्राप्त करने का प्रयास करेगा - यह देखते हुए कि age > 18 SQL के साथ पंक्तियों के लिए मौजूदा कुंजी लॉक है सर्वर निर्धारित करता है कि ताले असंगत हैं और कार्रवाई के अनुसार लेते हैं।

+0

धन्यवाद बहुत क्रैगन, आपका उत्तर यह स्पष्ट करता है। –