अपने डेटाबेस के लिए लेन-देन (ऑटोकॉमिट, स्पष्ट और निहित) हैंडलिंग के बारे में जागरूक होना आपको बैकअप से डेटा को पुनर्स्थापित करने से बचा सकता है।
लेनदेन यह सुनिश्चित करने के लिए डेटा हेरफेर स्टेटमेंट को नियंत्रित करते हैं कि वे परमाणु हैं। "परमाणु" होने का अर्थ है कि लेन-देन या तो होता है, या नहीं होता है। डेटाबेस में लेन-देन के पूरा होने का संकेत देने का एकमात्र तरीका COMMIT
. का उपयोग करना है या ROLLBACK
कथन (प्रति एएनएसआई-92, जिसमें दुख की बात है कि लेनदेन बनाने/शुरू करने के लिए वाक्यविन्यास शामिल नहीं था, इसलिए यह विक्रेता विशिष्ट है)। COMMIT
लेन-देन के भीतर किए गए परिवर्तनों (यदि कोई हो) को लागू करता है। ROLLBACK
लेन-देन के भीतर हुई किसी भी कार्रवाई की अवहेलना करता है - जब कोई UPDATE/DELETE कथन अनपेक्षित कुछ करता है तो अत्यधिक वांछनीय होता है ।
आम तौर पर अलग-अलग डीएमएल (इन्सर्ट, अपडेट, डिलीट) स्टेटमेंट ऑटोकॉमिट ट्रांजेक्शन में किए जाते हैं - जैसे ही स्टेटमेंट सफलतापूर्वक पूरा होता है, वे प्रतिबद्ध होते हैं। जिसका अर्थ है कि आपके जैसे मामलों में स्टेटमेंट चलाने से पहले डेटाबेस को राज्य में वापस रोल करने का कोई अवसर नहीं है। जब कुछ गलत हो जाता है, तो बैकअप से डेटा का पुनर्निर्माण करने के लिए उपलब्ध एकमात्र बहाली विकल्प है (बशर्ते कोई मौजूद हो)। MySQL में, ऑटोकॉमिट है पर InnoDB के लिए डिफ़ॉल्ट रूप से - MyISAM लेनदेन का समर्थन नहीं करता है। इसका उपयोग करके इसे अक्षम किया जा सकता है:
SET autocommit = 0
एक स्पष्ट लेन-देन तब होता है जब स्टेटमेंट को स्पष्ट रूप से परिभाषित लेनदेन कोड ब्लॉक के भीतर लपेटा जाता है - MySQL के लिए, यह START TRANSACTION
है
. इसके लिए स्पष्ट रूप से बनाए गए COMMIT
. की भी आवश्यकता होती है या ROLLBACK
लेनदेन के अंत में बयान। नेस्टेड लेनदेन इस विषय के दायरे से बाहर हैं।
निहित लेन-देन स्पष्ट लेन-देन से थोड़े अलग होते हैं। निहित लेनदेन को लेनदेन को परिभाषित करने के लिए स्पष्टीकरण की आवश्यकता नहीं होती है। हालांकि, स्पष्ट लेनदेन की तरह उन्हें COMMIT
. की आवश्यकता होती है या ROLLBACK
विवरण दिया जाना है।
निष्कर्ष
स्पष्ट लेनदेन सबसे आदर्श समाधान हैं - उन्हें एक बयान की आवश्यकता होती है, COMMIT
या ROLLBACK
, लेन-देन को अंतिम रूप देने के लिए, और जो हो रहा है वह स्पष्ट रूप से कहा गया है कि दूसरों को पढ़ने की आवश्यकता होनी चाहिए। अंतःक्रियात्मक रूप से डेटाबेस के साथ काम करने पर निहित लेनदेन ठीक है, लेकिन COMMIT
बयानों को केवल तभी निर्दिष्ट किया जाना चाहिए जब परिणामों का परीक्षण किया गया हो और पूरी तरह से मान्य होने के लिए निर्धारित किया गया हो।
इसका मतलब है कि आपको इसका इस्तेमाल करना चाहिए:
SET autocommit = 0;
START TRANSACTION;
UPDATE ...;
...और केवल COMMIT;
. का उपयोग करें जब परिणाम सही हों।
उस ने कहा, अद्यतन और हटाएं बयान आम तौर पर केवल प्रभावित पंक्तियों की संख्या लौटाते हैं, विशिष्ट विवरण नहीं। ऐसे कथनों को चयन कथनों में बदलें और शुद्धता सुनिश्चित करने के लिए परिणामों की समीक्षा करें पूर्व UPDATE/DELETE कथन का प्रयास करने के लिए।
परिशिष्ट
DDL (डेटा डेफिनिशन लैंग्वेज) स्टेटमेंट स्वचालित रूप से प्रतिबद्ध होते हैं - उन्हें COMMIT स्टेटमेंट की आवश्यकता नहीं होती है। IE:तालिका, अनुक्रमणिका, संग्रहीत कार्यविधि, डेटाबेस, और निर्माण या परिवर्तन विवरण देखें।