MySQL में SAVEPOINT के साथ नेस्टेड ट्रांजैक्शन लागू करें
MySQL सीधे नेस्टेड ट्रांजैक्शन (एक ट्रांजैक्शन के अंदर दूसरा ट्रांजैक्शन शुरू करना) का समर्थन नहीं करता। हालांकि, आप SAVEPOINT का उपयोग करके समान व्यवहार प्राप्त कर सकते हैं, जो आपको एक ट्रांजैक्शन के भीतर रोलबैक पॉइंट सेट करने की अनुमति देता है।
चरण-दर-चरण उदाहरण
1. टेबल बनाएं
mysql> CREATE TABLE NestedTransactionDemo (
-> Name VARCHAR(200)
-> );
2. ट्रांजैक्शन शुरू करें
mysql> START TRANSACTION;
3. पहला रिकॉर्ड डालें
mysql> INSERT INTO NestedTransactionDemo VALUES('John');
mysql> SELECT * FROM NestedTransactionDemo;
आउटपुट: John
4. सेवपॉइंट बनाएं और दूसरा रिकॉर्ड डालें
mysql> SAVEPOINT transaction2;
mysql> INSERT INTO NestedTransactionDemo VALUES('David');
mysql> SELECT * FROM NestedTransactionDemo;
आउटपुट: John, David
5. सेवपॉइंट पर रोलबैक करें
mysql> ROLLBACK TO transaction2; mysql> SELECT * FROM NestedTransactionDemo;
आउटपुट: केवल John (David हटा दिया गया)
6. फिर से रोलबैक (कोई प्रभाव नहीं)
mysql> ROLLBACK TO transaction2;
मुख्य अवधारणाएं
- SAVEPOINT नाम: एक नामित रोलबैक पॉइंट बनाता है।
- ROLLBACK TO सेवपॉइंट_नाम: उस सेवपॉइंट के बाद किए गए परिवर्तनों को पूर्ववत करता है, लेकिन ट्रांजैक्शन खुला रखता है।
- RELEASE SAVEPOINT नाम: एक सेवपॉइंट हटाता है।
- COMMIT: सभी परिवर्तनों को स्थायी करता है (सभी सेवपॉइंट हटा दिए जाते हैं)।
- ROLLBACK (सेवपॉइंट के बिना): पूरे ट्रांजैक्शन को रोलबैक करता है।
सीमाएं
- सेवपॉइंट केवल वर्तमान ट्रांजैक्शन के भीतर काम करते हैं।
- DDL कथन (CREATE, ALTER, DROP) निहित कमिट का कारण बनते हैं।
- ट्रू नेस्टेड ट्रांजैक्शन (स्वतंत्र कमिट/रोलबैक) MySQL में समर्थित नहीं हैं।