यह उस तरह से काम नहीं कर सकता। विचार करें:
- कार्यक्रम एक, आप एक लेन-देन खोलते हैं और एक तालिका FOO में सम्मिलित करते हैं जिसमें एक autoinc प्राथमिक कुंजी होती है (मनमाने ढंग से, हम कहते हैं कि इसे इसके मुख्य मूल्य के लिए 557 मिलता है)।
- कार्यक्रम दो शुरू होता है, यह एक लेनदेन खोलता है और तालिका FOO में 558 प्राप्त करता है।
- तालिका BAR में दो इन्सर्ट प्रोग्राम करें जिसमें एक कॉलम है जो FOO के लिए एक विदेशी कुंजी है। तो अब 558 FOO और BAR दोनों में स्थित है।
- कार्यक्रम दो अब प्रतिबद्ध है।
- कार्यक्रम तीन शुरू होता है और तालिका FOO से एक रिपोर्ट तैयार करता है। 558 रिकॉर्ड मुद्रित है।
- उसके बाद, प्रोग्राम एक वापस आ जाता है।
डेटाबेस 557 मान को कैसे पुनः प्राप्त करता है? क्या यह FOO में जाता है और 557 से अधिक अन्य सभी प्राथमिक कुंजियों को घटाता है? यह बार को कैसे ठीक करता है? यह रिपोर्ट प्रोग्राम थ्री आउटपुट पर छपे 558 को कैसे मिटाता है?
Oracle के अनुक्रम संख्याएं भी इसी कारण से लेन-देन से स्वतंत्र हैं।
यदि आप इस समस्या को निरंतर समय में हल कर सकते हैं, तो मुझे यकीन है कि आप डेटाबेस क्षेत्र में बहुत पैसा कमा सकते हैं।
अब, यदि आपकी आवश्यकता है कि आपके ऑटो इंक्रीमेंट फ़ील्ड में कभी भी अंतराल न हो (ऑडिटिंग उद्देश्यों के लिए, मान लें)। तब आप अपने लेनदेन को रोलबैक नहीं कर सकते। इसके बजाय आपको अपने रिकॉर्ड पर स्टेटस फ्लैग रखना होगा। पहले डालने पर, रिकॉर्ड की स्थिति "अपूर्ण" है, फिर आप लेनदेन शुरू करते हैं, अपना काम करते हैं और स्थिति को "प्रतिस्पर्धा" (या जो कुछ भी आपको चाहिए) में अपडेट करते हैं। फिर जब आप प्रतिबद्ध होते हैं, तो रिकॉर्ड लाइव होता है। यदि लेन-देन रोलबैक हो जाता है, तो ऑडिटिंग के लिए अपूर्ण रिकॉर्ड अभी भी मौजूद है। इससे आपको कई अन्य सिरदर्द होंगे लेकिन ऑडिट ट्रेल्स से निपटने का यह एक तरीका है।