सबसे पहले, आपके कार्यान्वयन में एक बग है। यदि कोई क्वेरी त्रुटिपूर्ण हो जाती है, तो वर्तमान लेनदेन स्वचालित रूप से वापस लुढ़क जाता है और फिर बंद हो जाता है। इसलिए जैसे-जैसे आप प्रश्नों को निष्पादित करना जारी रखेंगे, वे लेन-देन के भीतर नहीं होंगे (वे डीबी के लिए प्रतिबद्ध होंगे)। फिर, जब आप Rollback
निष्पादित करते हैं , यह चुपचाप विफल हो जाएगा। MySQL डॉक्स
से :
Rolling back can be a slow operation that may occur implicitly without the user
having explicitly asked for it (for example, when an error occurs).
स्पष्ट आदेश Rollback
केवल तभी उपयोग किया जाना चाहिए जब आप एप्लिकेशन में निर्धारित करते हैं कि आपको रोलबैक करने की आवश्यकता है (क्वेरी त्रुटि के अलावा अन्य कारणों से)। उदाहरण के लिए, यदि आप किसी खाते से धनराशि काट रहे हैं, तो आप स्पष्ट रूप से रोलबैक करेंगे यदि आपको पता चलता है कि उपयोगकर्ता के पास एक्सचेंज को पूरा करने के लिए पर्याप्त धनराशि नहीं है...
जहां तक लेन-देन का परीक्षण करने की बात है, मैं डेटाबेस की प्रतिलिपि बनाता हूं। मैं एक नया डेटाबेस बनाता हूं और "डमी डेटा" का एक सेट स्थापित करता हूं। फिर मैं एक स्वचालित उपकरण का उपयोग करके सभी परीक्षण चलाता हूं। उपकरण वास्तव में लेन-देन करेगा और रोलबैक को बाध्य करेगा, और जांच करेगा कि अपेक्षित डेटाबेस स्थिति पूरे परीक्षणों में बनी हुई है। चूंकि लेन-देन से अंतिम स्थिति को प्रोग्रामिक रूप से जानना कठिन है, यदि आपके पास लेनदेन के लिए अज्ञात इनपुट है, तो लाइव (या यहां तक कि कॉपी-से-लाइव) डेटा का परीक्षण करना आसान नहीं होगा। आप इसे (और चाहिए) कर सकते हैं, लेकिन यह निर्धारित करने के लिए कि आपका सिस्टम काम कर रहा है या नहीं, उन परिणामों पर निर्भर न रहें। स्वचालित परीक्षक के लिए नए परीक्षण मामले बनाने के लिए उन परिणामों का उपयोग करें...