में एक सौदे के भीतर SELECT कथन के लिए रखा गया है मुझे विश्वास है कि एसक्यूएल सर्वर में प्रत्येक SELECT
बयान का कारण होगा या तो एक साझा या कुंजी ताला रखा जाना। लेकिन क्या यह एक ही प्रकार के लॉक को लेनदेन में रखेगा? क्या साझा या कुंजी ताले अन्य प्रक्रियाओं को एक ही रिकॉर्ड पढ़ने की अनुमति देंगे?ताला किस तरह एसक्यूएल सर्वर
उदाहरण के लिए मैं निम्नलिखित तर्क
Begin Trans
-- select data that is needed for the next 2 statements
SELECT * FROM table1 where id = 1000; -- Assuming this returns 10, 20, 30
insert data that was read from the first query
INSERT INTO table2 (a,b,c) VALUES(10, 20, 30);
-- update table 3 with data found in the first query
UPDATE table3
SET d = 10,
e = 20,
f = 30;
COMMIT;
इस बिंदु पर मेरी चुनिंदा बयान अभी भी एक साझा या कुंजी लॉक पैदा करेगा या यह विशेष लॉक के पास भेजा जाएगा है? क्या अन्य लेन-देन तालिका 1 से रिकॉर्ड पढ़ने में सक्षम होंगे या क्या सभी लेन-देन तब तक इंतजार करेंगे जब तक कि मेरे लेन-देन किए जाने से पहले दूसरों का चयन करने में सक्षम न हो?
एक आवेदन में के बाद से एक सौदे के बाहर बयान का चयन करें स्थानांतरित करने के लिए और सिर्फ एक सौदे में सम्मिलित/अपडेट रखने बनाता है?
इस मूल्यवान जानकारी के लिए आपको बहुत बहुत धन्यवाद। इसलिए यदि SQL सर्वर किसी भी चयन कथन के लिए डिफ़ॉल्ट रूप से 'प्रतिबद्ध पढ़ें' का उपयोग करता है। वहाँ लेनदेन –
@MikeA बाहर मेरी चयन प्रश्नों को अलग करने का प्रयास करने के बाद से नहीं है: नहीं, कोई फर्क नहीं करता है - साझा ताले वास्तव में * पढ़ने * डेटा (बस से किसी अन्य प्रक्रिया को रोकने के लिए के लिए बस बहुत संक्षेप में हासिल कर ली हो जाएगा हमेशा करते पढ़ें कमिट चयन नहीं ताला: उन्हें बदलते समय आप उन्हें पढ़ रहे हैं), और उसके बाद वे फिर से जारी किया जाएगा - - अंदर या कि लेनदेन के बाहर एक ही प्रक्रिया –
मामले में आप इस बारे में पता नहीं कर रहे हैं। तालाब केवल उन्हीं परिवर्तनों वाले पृष्ठों पर लिया जाता है। आप आरसी के तहत एक टेबल पढ़ सकते हैं जो एक्सलॉक किया गया है, एक अन्य लेनदेन द्वारा टैबलेट किया गया है। (मैंने कोशिश की।) – usr