इस धारणा के साथ कि यह MS SQL सर्वर है, आप शायद UPDLOCK
want चाहते हैं , संभवतः ROWLOCK
. के साथ संयुक्त (तालिका संकेत
) मुझे एक अच्छा लेख खोजने में परेशानी हो रही है जो सिद्धांत का वर्णन करता है, लेकिन यहां त्वरित उदाहरण है:
SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1
यह कथन एक अपडेट लॉक रखेगा लेन-देन की अवधि के लिए पंक्ति में (इसलिए यह जानना महत्वपूर्ण है कि लेन-देन कब समाप्त होगा)। चूंकि अपडेट लॉक अनन्य लॉक के साथ असंगत हैं। (रिकॉर्ड अपडेट करने के लिए आवश्यक), यह लेनदेन समाप्त होने तक किसी को भी इस रिकॉर्ड को अपडेट करने से रोकेगा।
ध्यान दें कि लेन-देन पूरा होने तक इस रिकॉर्ड को संशोधित करने का प्रयास करने वाली अन्य प्रक्रियाओं को अवरुद्ध कर दिया जाएगा, हालांकि लेन-देन समाप्त होने के बाद उन्होंने जो कुछ भी लिखने का अनुरोध किया था, उसके साथ जारी रहेगा (जब तक कि वे समय समाप्त नहीं हो जाते या डेडलॉक प्रक्रिया के रूप में समाप्त नहीं हो जाते)। यदि आप इसे रोकना चाहते हैं तो आपकी अन्य प्रक्रियाओं को अतिरिक्त संकेतों का उपयोग करने की आवश्यकता है ताकि या तो एक असंगत लॉक का पता चलने पर निरस्त किया जा सके, या यदि यह बदल गया है तो रिकॉर्ड को छोड़ दें।
साथ ही, उपयोगकर्ता इनपुट की प्रतीक्षा करते समय आपको रिकॉर्ड लॉक करने के लिए इस पद्धति का उपयोग नहीं करना चाहिए . यदि यह आपका इरादा है तो आपको इसके बजाय अपनी तालिका में किसी प्रकार का "संशोधित किया जा रहा" कॉलम जोड़ना चाहिए।
SQL सर्वर लॉकिंग तंत्र वास्तव में केवल डेटा अखंडता को बनाए रखने/गतिरोध को रोकने के लिए उपयोग के लिए उपयुक्त हैं - लेनदेन को आम तौर पर जितना संभव हो उतना छोटा रखा जाना चाहिए। और निश्चित रूप से उपयोगकर्ता इनपुट की प्रतीक्षा करते समय इसे बनाए नहीं रखा जाना चाहिए।