मैं SQL सर्वर के लिए बहुत नया हूं, और यह समझना चाहूंगा कि क्या निम्न, बहुत सरल select
कथन किसी भी ताले को ले जाएगा।
Select * from Student;
कृपया उस मामले पर विचार करें जहां बयान एक begin tran
ब्लॉक के अंदर नहीं चल रहा है ।
मैं SQL सर्वर के लिए बहुत नया हूं, और यह समझना चाहूंगा कि क्या निम्न, बहुत सरल select
कथन किसी भी ताले को ले जाएगा।
Select * from Student;
कृपया उस मामले पर विचार करें जहां बयान एक begin tran
ब्लॉक के अंदर नहीं चल रहा है ।
जवाबों:
हाँ, यह उन पंक्तियों पर एक साझा लॉक लेता है जिसे वह डिफ़ॉल्ट रूप से पढ़ता है (यह क्लस्टर इंडेक्स के सभी पृष्ठों पर एक इंटेंट शेयर्ड लॉक लेता है जिसे वह पढ़ेगा), यह गंदे रीड्स को रोकने के लिए किया जाता है। हालाँकि इसको बायपास करने के तरीके हैं (SQL Server में nolock hint है)। यदि कथन BEGIN TRAN में नहीं है, तो SELECT स्टेटमेंट चलने के बाद लॉक को छोड़ दिया जाता है।
और अधिक जानकारी यहां पाई जा सकती है:
http://msdn.microsoft.com/en-us/library/ms184286(v=sql.105).aspx http://www.sqlteam.com/article/introduction-to-locking-in-sql-server
मैं यह समझना चाहूंगा कि क्या निम्नलिखित, बहुत सरल चयन विवरण किसी भी ताले को ले जाएगा
यह एक गलत धारणा है कि गंदे रीड्स को रोकने के SELECT
लिए डिफॉल्ट READ COMMITTED
ट्रांजैक्शन आइसोलेशन लेवल पर चलने वाली क्वेरी हमेशा साझा लॉक लेगी।
SQL सर्वर साझा पंक्ति-स्तरीय लॉक लेने से बच सकता है, जब उनके बिना uncommitted डेटा पढ़ने का कोई खतरा नहीं है (हालांकि उच्च-स्तरीय इंटेंट-साझा (IS) ताले अभी भी लिए गए हैं)।
यहां तक कि अगर साझा पंक्ति ताले को लिया जाता है (शायद इसलिए कि एक और समवर्ती लेनदेन ने पृष्ठ को पंक्ति को संशोधित किया है) उन्हें SELECT
बयान पूरा होने से बहुत पहले जारी किया जा सकता है ।
ज्यादातर मामलों में, अगली पंक्ति को सर्वर संसाधित करने से ठीक पहले पंक्ति को 'अनलॉक' किया जाता है। ऐसी परिस्थितियां हैं जिनमें डिफ़ॉल्ट अलगाव स्तर पर साझा किए गए ताले वर्तमान वक्तव्य के अंत तक आयोजित किए जाते हैं, लेकिन लेनदेन के अंत तक नहीं ।
NOLOCK
तालिका संकेत के साथ वर्तमान अलगाव स्तर को ओवरराइड करना लगभग हमेशा एक बुरा विचार है ।
लॉकिंग एक कार्यान्वयन विवरण है। SQL सर्वर ताले को लेता है जब यह सुनिश्चित करने के लिए आवश्यक हो कि यह वर्तमान अलगाव स्तर द्वारा प्रदान की गई शब्दार्थ गारंटी से मिलता है । निश्चित रूप से ऐसे समय होते हैं जहां ताले को क्यों लिया जाता है, इसके बारे में थोड़ा-बहुत जानना उपयोगी है, लेकिन उनकी भविष्यवाणी करने का प्रयास बहुत बार काउंटर-उत्पादक होता है।
एसक्यूएल सर्वर अलगाव स्तर की एक विस्तृत विविधता प्रदान करता है; वह चुनें, जो आपके डेटा उपभोक्ताओं की गारंटी और व्यवहार प्रदान करता है।