एसक्यूएल लेनदेन का उपयोग सम्मिलित करने, अद्यतन करने के लिए किया जाता है, लेकिन इसका उपयोग रिकॉर्ड पढ़ने के लिए किया जाना चाहिए?क्या मुझे रिकॉर्ड पढ़ने के दौरान एसक्यूएल लेनदेन का उपयोग करना चाहिए?
उत्तर
यदि आप एक ही प्रश्न में सभी रिकॉर्ड्स पूछ रहे हैं, और उन्हें एक बार में वापस खींच रहे हैं, तो इसकी कोई आवश्यकता नहीं है। सब कुछ एक निहित लेनदेन में लपेटा गया है। यही कहना है, भले ही आप एक मिलियन रिकॉर्ड वापस प्राप्त करें, और यहां तक कि यदि अन्य प्रक्रियाएं रिकॉर्ड बदल रही हैं, तो भी आप देखेंगे कि एक ही समय में सभी दस लाख रिकॉर्ड कैसा दिखते थे।
केवल पढ़ने की प्रक्रिया में आपको केवल लेनदेन की आवश्यकता होगी (और, अक्सर, एक विशिष्ट लॉकिंग संकेत):
- आप "टुकड़ा-भोजन" रिकॉर्ड पढ़ते हैं और मूल्यों को बदलने के लिए और कुछ नहीं चाहिए जबकि आप हालांकि फिर से शुरू करते हैं। [जैसे कि एडीओ में एक कनेक्टेड रिकॉर्डसेट जिसे आप कर्सर के माध्यम से कर्सर करते हैं।]
- आप कुछ डेटा पढ़ते हैं, कुछ गणना करते हैं, फिर कुछ संबंधित डेटा पढ़ते हैं, लेकिन धारणा पर औसत समय में कुछ भी नहीं बदला जाता है।
संक्षेप में, आप लेन-देन की जरूरत है जब आप चाहते हैं अन्य प्रक्रियाओं SQL कथन के बीच अपने डेटा के साथ हस्तक्षेप करने से रोक दिया जाए।
शुद्ध पढ़ने के लिए लेनदेन रैपिंग की आवश्यकता नहीं है।
अपने SQL कथन के भीतर, लॉक संकेतों को आपके लिए उचित डेटा लौटने पर ध्यान रखना चाहिए (http://msdn.microsoft.com/en-us/library/aa213026%28SQL.80%29.aspx)।
सर्वर स्तर पर, आप लेनदेन अलगाव स्तर (http://msdn.microsoft.com/en-us/library/ms173763.aspx) सेट कर सकते हैं।
संपादित
शुद्ध समझाते हुए पढ़ता
सभी अपने एसक्यूएल बयान तो आप आप परिणाम को पढ़ रहे हैं एक सौदे
SELECT Col1, Col2
From Table1
INNER JOIN Table2
ON Table1.Id = Table2.Table1Id
में रैप करने के लिए की जरूरत नहीं है पढ़ता है इस प्रकार की है, तो जो समानांतर में अन्य लेनदेन से प्रभावित हो सकता है तो आपको लेनदेन में लपेटना होगा। उदाहरण के लिए:
BEGIN TRANSACTION
INSERT INTO AccountTransactions (Type, Amount) Values ('Credit', 43.21)
UPDATE AccountSummary SET Balance = Balance + 43.21
SELECT @Balance = Balance FROM AccountSummary
COMMIT TRANSACTION
वास्तव में, आप केवल शेष राशि वापस कर रहे हैं, लेकिन पूरे मौद्रिक लेनदेन को दो स्थानों पर काम करना है।
निम्नलिखित उदाहरण में, कोई समवर्ती प्रक्रिया आपके द्वारा पढ़ी जा रही तालिकाओं में हस्तक्षेप कर सकती है। डेटा का कोई लेखन नहीं है, लेकिन संबंधित पढ़ने के बीच गणनाएं हैं। इस तरह के एक ट्रांज़ेक्शन को डेटा की स्थिति की रक्षा करने की आवश्यकता होगी। @temp चुनें
हालांकि यह एक शुद्ध पठन नहीं है। राज ने कहा "शुद्ध पढ़ने के लिए लेनदेन लपेटना जरूरी नहीं है।" –
"शुद्ध पढ़ने" को परिभाषित करें, मैंने जो उदाहरण दिया है वह एक चर के अलावा किसी अन्य चीज़ के लिए कोई आवेषण, अद्यतन या हटा देता है। [यह एक आईएनटी, एक टेबल वैरिएबल, या कुछ अन्य डेटा कंटेनर हो सकता है ताकि गणना को सुविधाजनक बनाया जा सके जो अंतिम पढ़ने के व्यवहार को परिभाषित करेगा] – MatBailie
यदि आपको मिलीसेकंद जानकारी के लिए सबसे अद्यतित होने की आवश्यकता है तो आप TransactionOptions
के साथ के IsolationLevel
के साथ बनाए गए लेनदेन का उपयोग कर सकते हैं।
यह प्रदर्शन को प्रभावित करेगा क्योंकि यह तालिका (या तालिका के हिस्सों) को लॉक करेगा, इसलिए आपको यह पता लगाने की आवश्यकता है कि आपको वास्तव में इसकी आवश्यकता है या नहीं।
अधिकांश उपयोगों के लिए, यदि आप पढ़ रहे हैं, तो आपको इसके आसपास एक लेनदेन लपेटने की आवश्यकता नहीं है (मान लीजिए कि आप केवल एक ऑपरेशन में पढ़ रहे हैं)।
यह वास्तव में आपके आवेदन पर निर्भर करता है, इसके लिए आवश्यक डेटा और इसका उपयोग कैसे किया जाता है।
उदाहरण के लिए, यदि आप पढ़ते हैं और परिणामों के आधार पर आप लिखते हैं या अपडेट करते हैं, लेकिन यह महत्वपूर्ण है कि जो डेटा आपने अभी पढ़ा है वह वर्तमान है, आपको शायद पूरे तर्क को एक ही लेनदेन में लपेटना चाहिए।
नहीं, डेटा पढ़ने के लिए आम तौर पर लेनदेन की आवश्यकता नहीं होती है और यह आपके डेटा को भी धीमा कर देगा।
मैं आपको एटीओएमआईसी शब्द पर पढ़ने का सुझाव दूंगा। इससे आपको यह समझने में मदद मिलेगी कि किस लेनदेन के लिए हैं।
लेनदेन करना संभव है लेकिन इसका उद्देश्य क्या है?
आप सेट ट्रांसलेशन इशोलेशन लेवल स्टेटमेंट का उपयोग कर पूरे SQL सर्वर सत्र के लिए उपयुक्त अलगाव स्तर सेट कर सकते हैं।
SET TRANSACTION ISOLATION LEVEL
{
READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE
}
Locking in Microsoft SQL Server:
यह एसक्यूएल सर्वर पुस्तकें ऑनलाइन से वाक्य रचना है।
जब आप किसी लेन-देन में कुछ संशोधित करते हैं, तो आप यह देखने के लिए पढ़ा गया कथन का उपयोग कर सकते हैं कि ऑपरेशन प्रभावी होने से ठीक पहले क्या होता है।
लेन-देन समवर्ती मुद्दों से बचने के लिए हैं जब एक तार्किक लेनदेन वास्तव में कई SQL प्रश्नों के लिए मानचित्र करता है। उदाहरण के लिए, बैंक खाते के लिए, यदि आप एक खाते से दूसरे खाते में धन स्थानांतरित कर रहे हैं, तो आप पहले खाते से राशि घटाएंगे और फिर इसे अन्य (या इसके विपरीत) में जोड़ देंगे। लेकिन, यदि आपके डेटाबेस के बीच कुछ त्रुटि एक अमान्य स्थिति में होगी (आपने एक खाते से राशि घटा दी हो लेकिन इसे अन्य में नहीं जोड़ा हो)। इसलिए, यदि आप एक ही प्रश्न में अपने सभी डेटा पढ़ रहे हैं, तो आपको लेनदेन की आवश्यकता नहीं है।
- 1. क्या मुझे लेनदेन के लिए एमएसएमक्यू या एसक्यूएल सेवा ब्रोकर का उपयोग करना चाहिए?
- 2. मुझे अपने प्रश्नों में लेनदेन का उपयोग कब करना चाहिए?
- 3. मुझे क्या gacutil.exe का उपयोग करना चाहिए?
- 4. क्या मुझे HttpRuntime.Cache का उपयोग करना चाहिए?
- 5. क्या मुझे jQuery.each() का उपयोग करना चाहिए?
- 6. क्या मुझे jQuery.inArray() का उपयोग करना चाहिए?
- 7. क्या मुझे बूटस्ट्रैप का उपयोग करना चाहिए?
- 8. रिकॉर्ड को संग्रहीत करने के लिए मुझे किस डेटाबेस का उपयोग करना चाहिए, और मुझे इसका उपयोग कैसे करना चाहिए?
- 9. क्या मुझे हमेशा निबर्ननेट में लेनदेन का उपयोग करना चाहिए (यहां तक कि सरल पढ़ने और लिखने के लिए भी)?
- 10. मुझे किस डीबी का उपयोग करना चाहिए?
- 11. मुझे कौन से लॉक संकेतों का उपयोग करना चाहिए (टी-एसक्यूएल)?
- 12. क्या मुझे टेक्स्ट फ़ाइल या डेटाबेस का उपयोग करना चाहिए?
- 13. क्या मुझे सॉकेट्स को पढ़ने/लिखने के लिए फ़ाइल डिस्क्रिप्टर या स्ट्रीम का उपयोग करना चाहिए
- 14. क्या मुझे वेब विकास सीखने के दौरान फ्रेमवर्क का उपयोग करना चाहिए
- 15. क्या मुझे int या UInt16 का उपयोग करना चाहिए?
- 16. मुझे डोलॉल्स का उपयोग क्यों करना चाहिए?
- 17. क्या मुझे स्थिर डेटा सदस्यों का उपयोग करना चाहिए? (सी ++)
- 18. एसक्यूएल सर्वर 2008: क्या मुझे विंडोज ऑथ या एसक्यूएल सर्वर ऑथ का उपयोग करना चाहिए?
- 19. क्या मुझे MySQL के बजाय NoSQL का उपयोग करना चाहिए?
- 20. क्या मुझे पिलोन के साथ wtforms का उपयोग करना चाहिए?
- 21. मुझे क्या करना चाहिए?
- 22. NHibernate, क्या मुझे ReadCommitted या ReadUncommited लेनदेन अलगाव स्तर का उपयोग करना चाहिए?
- 23. सी # मुझे सूची का उपयोग कब करना चाहिए और मुझे सरणीसूची का उपयोग कब करना चाहिए?
- 24. क्या मुझे स्लीप() का उपयोग करना चाहिए या बस उन्हें
- 25. मुझे ConcurrentSkipListMap का उपयोग कब करना चाहिए?
- 26. क्या मुझे एम या पीएक्स का उपयोग करना चाहिए?
- 27. मुझे ईएमएफ का उपयोग क्यों करना चाहिए?
- 28. मुझे @properties का उपयोग क्यों करना चाहिए?
- 29. मुझे _aligned_malloc() का उपयोग कब करना चाहिए?
- 30. मुझे glbindAttribLocation का उपयोग क्यों करना चाहिए?
सभी उत्तर देने वालों का धन्यवाद, मेरी इच्छा है कि सभी को उत्तर के रूप में चिह्नित करने का विकल्प था लेकिन वहां नहीं है। उदाहरण देने के लिए धन्यवाद, लॉकिंग के स्पष्टीकरण के लिए एक लिंक देने के लिए, मिलीसेकंड में डेटा को अद्यतित करने के तरीके के स्पष्टीकरण के लिए धन्यवाद। – user287745