यदि आप एक लेन-देन रोलबैक नहीं करते हैं तो क्या परिवर्तन अभी भी किया जाएगा?


10

कहो मैं एक क्वेरी चला रहा हूं

begin tran

update users
set name = 'Jimmy'
where name = 'john'

यदि मैं लेन-देन को रोलबैक नहीं करता हूं , तो क्या ये परिवर्तन अभी भी किए जाएंगे, क्या यह एक त्रुटि फेंक देगा या यह वैसे भी रोलबैक के रूप में कार्य करेगा?


मुझे लगता है कि इन बयानों या अनुप्रयोग को चलाने के लिए आपके द्वारा उपयोग किए जाने वाले क्लाइंट सॉफ़्टवेयर के व्यवहार पर निर्भर करता है जहां वे एम्बेडेड हैं। कॉन्फ़िगर किए जाने पर कुछ ऑटो-कमिट कर सकते हैं (SSMS डिफ़ॉल्ट रूप से ऐसा करेगा)।
मस्कटियो

3
स्पष्ट रूप से घोषित लेनदेन ऑटो-कमिट नहीं करते हैं। चूंकि जोश ने एक लेन-देन की शुरुआत की घोषणा की है, यह बिल्कुल वैसा ही व्यवहार करेगा जैसा कि जस्टिन गुफा ने उत्तर दिया है।
डेव

जवाबों:


16

आपको यह समझना होगा कि लेनदेन क्या है - यह एक एकल इकाई है। यह ALL या NOTHING है ( ACID गुणों का अनुसरण करता है ) और यह डेटाबेस संगति की गारंटी देता है।

यदि मैं लेन-देन को रोलबैक नहीं करता हूं, तो क्या ये परिवर्तन अभी भी किए जाएंगे

आपके द्वारा किए जाने पर ही परिवर्तन किए जाएंगे। SQL सर्वर लेन-देन लॉग में सभी परिवर्तनों को रिकॉर्ड करेगा और एक बार जब आप प्रतिबद्ध होते हैं, तो वे डेटा फ़ाइल में कठोर हो जाते हैं।

यदि आप प्रतिबद्ध नहीं हैं, तो आपका लेनदेन अनिश्चित काल तक खुला रहेगा - जिसे आप देख sys.dm_tran_active_transactions / sys.dm_tran_database_transactions / sys.dm_tran_session_transactionsया उपयोग कर सकते हैं DBCC OPENTRAN

इसके अलावा, आपने जो शुरू किया है वह एक स्पष्ट लेनदेन है , जिसे स्पष्ट रूप से एक COMMIT या रोलबैक विवरण के साथ समाप्त किया जाना चाहिए।

यह भी पढ़ें - क्या हमेशा लेन-देन करना एक बुरा व्यवहार है?


@JoshStevenson मुझे लगता है कि डेटाबेस संदर्भ में परमाणु संचालन के बारे में पढ़ते समय इसके लायक है।
नेलज़

12

यदि आप लेन-देन न तो करते हैं और न ही रोलबैक करते हैं, तो लेन-देन अनिश्चित काल तक जारी रहेगा। यह है, जब तक या तो आप एक के माध्यम से लेन-देन अंत अपने ताले धारण करने के लिए, संभवत: अन्य सत्र को अवरुद्ध करता रहेगा commitया एक rollbackया जब तक एक डीबीए साथ आता है और सत्र को मारता है (या विफल कनेक्शन जब तक एक नेटवर्क हिचकी की तरह कुछ का कारण बनता है)। यदि कोई DBA सत्र को मारता है, तो वे इसके लिए और किसी भी अन्य खुले लेनदेन के लिए एक रोलबैक जारी करेंगे।


यह उचित उत्तर है। जानकारी के इस टुकड़े के बिना यह मेरे लिए समझ में नहीं आया कि दोनों COMMIT और ROLLBACK कथनों का पूरी तरह से उपयोग किया जा सकता है।
तारेक

1

जब तक लेन-देन प्रतिबद्ध न हो, तब तक परिवर्तन नहीं किए जाएंगे, इसके सभी या कुछ भी नहीं जैसा कि ऊपर दिए गए उत्तर हैं,

इसके पीछे एटमॉसिस कारण है, आप एसीआईडी ​​लेनदेन गुणों, इसके मूलभूत गुणों की जांच कर सकते हैं जो एक डेटाबेस सिस्टम का पालन करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.