स्ट्रक्चर्ड क्वेरी लैंग्वेज में, TCL ट्रांजेक्शन कंट्रोल लैंग्वेज का संक्षिप्त नाम है। एक डेटाबेस में काम की एक इकाई का गठन आदेशों के लगातार निष्पादन के बाद होता है जिसे लेनदेन के रूप में जाना जाता है।
स्ट्रक्चर्ड क्वेरी लैंग्वेज में कुछ कमांड होते हैं, और ट्रांजेक्शन कंट्रोल लैंग्वेज कमांड SQL कमांड में से एक है। TCL कमांड डेटाबेस में लेनदेन को संभालता है
स्ट्रक्चर्ड क्वेरी लैंग्वेज में, कमिट, रोलबैक और सेवपॉइंट एसक्यूएल में व्यापक रूप से उपयोग किए जाने वाले ट्रांजेक्शन कंट्रोल लैंग्वेज कमांड हैं।
आइए अब कुछ उदाहरणों की सहायता से स्ट्रक्चर्ड क्वेरी लैंग्वेज में ट्रांजेक्शन कंट्रोल लैंग्वेज कमांड के काम करने के तरीके को समझते हैं और सीखते हैं। ट्रांजेक्शन कंट्रोल लैंग्वेज कमांड हैं:
- कमांड कमिट
- रोलबैक कमांड
- सेवपॉइंट कमांड
कमांड कमिट करें
SQL में कमिट कमांड का उपयोग उन सभी लेनदेन को सहेजने के लिए किया जाता है जो स्थायी रूप से डिस्क में बदल जाते हैं। जब भी हम डेटा डेफिनिशन लैंग्वेज कमांड (DDL) जैसे INSERT कमांड, UPDATE कमांड और DELETE कमांड पर ऑपरेशन करते हैं, तो इन कमांड द्वारा किए गए संशोधन स्थायी होते हैं लेकिन वर्तमान सत्र को बंद करने से पहले या सत्र के अंत तक। सत्र बंद होने से पहले हम डेटा परिभाषा भाषा का उपयोग करके किए गए ऑपरेशन को आसानी से पूर्ववत कर सकते हैं। कमिट कमांड का प्रयोग बिना सत्र समाप्त हुए संशोधन को स्थायी रूप से स्टोरेज में सेव करने के लिए किया जाता है।
वाक्यविन्यास:
COMMIT;
यदि आपके पास सिस्टम में एक मौजूदा डेटाबेस है, तो उस मौजूदा डेटाबेस का उपयोग करें या एक नया डेटाबेस बनाएं। हम मौजूदा डेटाबेस कंपनी का उपयोग करेंगे।
USE Company
पहले से मौजूद कर्मचारियों की टेबल पर विचार करें जिनमें कुछ निश्चित डेटा है:
कर्मचारी | FIRST_NAME | LAST_NAME | वेतन | शहर | विभाग | मैनेजरिड |
1001 | वैभवी | मिश्रा | 65000 | पुणे | ओरेकल | 1 |
1002 | वैभव | शर्मा | 60000 | नोएडा | ओरेकल | 1 |
1003 | निखिल | वाणी | 50000 | जयपुर | FMW | 2 |
2001 | प्राची | शर्मा | 55500 | चंडीगढ़ | ओरेकल | 1 |
2002 | भावेश | जैन | 65500 | पुणे | FMW | 2 |
2003 | रुचिका | जैन | 50000 | मुंबई | परीक्षण | 4 |
3001 | प्रानोटी | शेंडे | 55500 | पुणे | जावा | 3 |
3002 | अनुजा | WANRE | 50500 | जयपुर | FMW | 2 |
3003 | दीपम | जौहारी | 58500 | मुंबई | जावा | 3 |
4001 | राजेश | GOUD | 60500 | मुंबई | परीक्षण | 4 |
SQL में, लेन-देन शुरू करने के लिए START TRANSACTION क्वेरी का उपयोग किया जाता है।
START TRANSACTION;
अब, हम मौजूदा कर्मचारी तालिका में दो रिकॉर्ड डालेंगे। एकाधिक रिकॉर्ड सम्मिलित करने के लिए, हम नीचे दिए गए कथन का उपयोग करेंगे:
INSERT INTO EMPLOYEES (EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY, DEPARTMENT, MANAGERID) VALUES (4002, 'ASHWINI', 'BAGHAT', 54500, 'JAIPUR', 'JAVA', 3), (4003, 'PURVA', 'DHANDEKAR', 57000, 'PUNE', 'TESTING', 4);
अब हम SELECT क्वेरी का उपयोग यह सत्यापित करने के लिए करेंगे कि रिकॉर्ड सफलतापूर्वक तालिका में डाले गए हैं या नहीं।
SELECT * FROM EMPLOYEES;
उपरोक्त क्वेरी पर आउटपुट:
कर्मचारी | FIRST_NAME | LAST_NAME | वेतन | शहर | विभाग | मैनेजरिड |
1001 | वैभवी | मिश्रा | 65000 | पुणे | ओरेकल | 1 |
1002 | वैभव | शर्मा | 60000 | नोएडा | ओरेकल | 1 |
1003 | निखिल | वाणी | 50000 | जयपुर | FMW | 2 |
2001 | प्राची | शर्मा | 55500 | चंडीगढ़ | ओरेकल | 1 |
2002 | भावेश | जैन | 65500 | पुणे | FMW | 2 |
2003 | रुचिका | जैन | 50000 | मुंबई | परीक्षण | 4 |
3001 | प्रानोटी | शेंडे | 55500 | पुणे | जावा | 3 |
3002 | अनुजा | WANRE | 50500 | जयपुर | FMW | 2 |
3003 | दीपम | जौहारी | 58500 | मुंबई | जावा | 3 |
4001 | राजेश | GOUD | 60500 | मुंबई | परीक्षण | 4 |
4002 | अश्विनी | बगत | 54500 | जयपुर | जावा | 3 |
4003 | पूर्वा | धंडेकर | 5700 | पुणे | परीक्षण | 4 |
आउटपुट दिखाता है कि सभी रिकॉर्ड सफलतापूर्वक डाले गए हैं।
कर्मचारी टेबल पर INSERT ऑपरेशन को सेव करने के लिए, हम COMMIT कमांड को निष्पादित करेंगे।
COMMIT;
SQL में, डिफ़ॉल्ट रूप से, ऑटो-कमिट चालू होता है। SQL में स्वतः-प्रतिबद्धता को बंद करने के लिए, स्वतः-प्रतिबद्ध मान को 0 पर सेट करें।
हम कर्मचारी आईडी 4002 को अपडेट करेंगे और शहर को 'नोएडा' के रूप में सेट करेंगे। कर्मचारी रिकॉर्ड को अपडेट करने के लिए नीचे दी गई क्वेरी का उपयोग करें।
UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;
अब हम SELECT क्वेरी का उपयोग यह सत्यापित करने के लिए करेंगे कि तालिका में रिकॉर्ड सफलतापूर्वक अपडेट किया गया है या नहीं।
SELECT * FROM EMPLOYEES;
उपरोक्त क्वेरी पर आउटपुट:
कर्मचारी | FIRST_NAME | LAST_NAME | वेतन | शहर | विभाग | मैनेजरिड |
1001 | वैभवी | मिश्रा | 65000 | पुणे | ओरेकल | 1 |
1002 | वैभव | शर्मा | 60000 | नोएडा | ओरेकल | 1 |
1003 | निखिल | वाणी | 50000 | जयपुर | FMW | 2 |
2001 | प्राची | शर्मा | 55500 | चंडीगढ़ | ओरेकल | 1 |
2002 | भावेश | जैन | 65500 | पुणे | FMW | 2 |
2003 | रुचिका | जैन | 50000 | मुंबई | परीक्षण | 4 |
3001 | प्रानोटी | शेंडे | 55500 | पुणे | जावा | 3 |
3002 | अनुजा | WANRE | 50500 | जयपुर | FMW | 2 |
3003 | दीपम | जौहारी | 58500 | मुंबई | जावा | 3 |
4001 | राजेश | GOUD | 60500 | मुंबई | परीक्षण | 4 |
4002 | अश्विनी | बगत | 54500 | नोएडा | जावा | 3 |
4003 | पूर्वा | धंडेकर | 5700 | पुणे | परीक्षण | 4 |
जैसा कि हम आउटपुट में देख सकते हैं, कर्मचारी आईडी 4002 शहर को संशोधित किया गया था।
कर्मचारियों की मेज पर परिवर्तनों को सहेजने के लिए, हम एक COMMIT कमांड लिखेंगे।
COMMIT;
अब, हम कर्मचारी तालिका से कर्मचारी आईडी 4003 हटा देंगे। कर्मचारी रिकॉर्ड को हटाने के लिए नीचे दी गई क्वेरी का उपयोग करें।
DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;
अब हम SELECT क्वेरी का उपयोग यह सत्यापित करने के लिए करेंगे कि तालिका में रिकॉर्ड सफलतापूर्वक हटा दिया गया है या नहीं।
SELECT * FROM EMPLOYEES;
उपरोक्त क्वेरी पर आउटपुट:
कर्मचारी | FIRST_NAME | LAST_NAME | वेतन | शहर | विभाग | मैनेजरिड |
1001 | वैभवी | मिश्रा | 65000 | पुणे | ओरेकल | 1 |
1002 | वैभव | शर्मा | 60000 | नोएडा | ओरेकल | 1 |
1003 | निखिल | वाणी | 50000 | जयपुर | FMW | 2 |
2001 | प्राची | शर्मा | 55500 | चंडीगढ़ | ओरेकल | 1 |
2002 | भावेश | जैन | 65500 | पुणे | FMW | 2 |
2003 | रुचिका | जैन | 50000 | मुंबई | परीक्षण | 4 |
3001 | प्रानोटी | शेंडे | 55500 | पुणे | जावा | 3 |
3002 | अनुजा | WANRE | 50500 | जयपुर | FMW | 2 |
3003 | दीपम | जौहारी | 58500 | मुंबई | जावा | 3 |
4001 | राजेश | GOUD | 60500 | मुंबई | परीक्षण | 4 |
4002 | अश्विनी | बगत | 54500 | नोएडा | जावा | 3 |
आउटपुट पुष्टि करता है कि हमने कर्मचारी आईडी 4003 विवरण हटा दिए हैं।
कर्मचारियों की मेज पर परिवर्तनों को सहेजने के लिए, हम एक COMMIT कमांड लिखेंगे।
COMMIT;
सेवपॉइंट कमांड
निष्पादित डेटाबेस संचालन को दो भागों में विभाजित किया जा सकता है। उदाहरण के लिए, लेन-देन के एक खंड के रूप में हमारे द्वारा किए गए सभी डिलीट स्टेटमेंट और लेनदेन के एक सेगमेंट के रूप में अपडेट स्टेटमेंट पर विचार करें। इन्सर्ट क्वेश्चन को इंसर्ट पार्ट में सेव करने के लिए और उसी ट्रांजेक्शन के डिलीट पार्ट में क्वेश्चन को डिलीट करने के लिए, हम SQL में SAVEPOINT कमांड का उपयोग करते हैं। मान लीजिए कि हम डिलीट से संबंधित सभी प्रश्नों को डिलीट नाम के सेवपॉइंट से सेव करना चाहते हैं। सभी डिलीट-संबंधित ऑपरेशन को एक सेवपॉइंट में सेव करने के लिए, हमें डिलीट क्वेरी को करने के बाद सेवपॉइंट नाम के बाद सेवपॉइंट कमांड को निष्पादित करना होगा।
वाक्यविन्यास:
SAVEPOINT savepoint name;
रोलबैक आदेश
लेन-देन करते समय, हमने लेन-देन के विभिन्न खंडों को बचाने के लिए बचत बिंदु बनाए। जैसे ही उपयोगकर्ता की आवश्यकताएं बदलती हैं, उपयोगकर्ता लेनदेन को विभिन्न बचत बिंदुओं पर पूर्ववत कर सकता है। एक परिदृश्य पर विचार करें:हमने तालिका निर्माण और तालिका में रिकॉर्ड प्रविष्टि के बाद एक लेनदेन शुरू किया है। हमने टेबल में रिकॉर्ड जोड़ने के बाद सेवपॉइंट नाम के आईएनएस का निर्माण किया। सम्मिलन के बाद, हमने डिलीट ऑपरेशन किया, और बाद में हमें याद आया कि गलत रिकॉर्ड को गलती से हटा दिया गया था। सेवपॉइंट आईएनएस तक पहुंचने के लिए हम अपने लेन-देन को पूर्ववत करेंगे। लेन-देन को पूर्ववत करने के लिए, रोलबैक कमांड का उपयोग करें।
हम अपने द्वारा किए गए ऑपरेशन को वापस ले सकते हैं या पूरे सेवपॉइंट लेनदेन को वापस रोल कर सकते हैं।
ऑपरेशन को रोलबैक करने के लिए सिंटैक्स:
ROLLBACK;
लेन-देन को रोलबैक करने के लिए सिंटैक्स:
ROLLBACK TO savepoint;
SAVEPOINT और ROLLBACK कमांड के उदाहरण:
यदि आपके पास सिस्टम में एक मौजूदा डेटाबेस है, तो उस मौजूदा डेटाबेस का उपयोग करें या एक नया डेटाबेस बनाएं। हम कंपनी नाम के पहले से मौजूद डेटाबेस का चयन करेंगे।
USE Company
मौजूदा कर्मचारी तालिका पर विचार करें जिसमें निम्नलिखित रिकॉर्ड हैं:
कर्मचारी | FIRST_NAME | LAST_NAME | वेतन | शहर | विभाग | मैनेजरिड |
1001 | वैभवी | मिश्रा | 65000 | पुणे | ओरेकल | 1 |
1002 | वैभव | शर्मा | 60000 | नोएडा | ओरेकल | 1 |
1003 | निखिल | वाणी | 50000 | जयपुर | FMW | 2 |
2001 | प्राची | शर्मा | 55500 | चंडीगढ़ | ओरेकल | 1 |
2002 | भावेश | जैन | 65500 | पुणे | FMW | 2 |
2003 | रुचिका | जैन | 50000 | मुंबई | परीक्षण | 4 |
3001 | प्रानोटी | शेंडे | 55500 | पुणे | जावा | 3 |
3002 | अनुजा | WANRE | 50500 | जयपुर | FMW | 2 |
3003 | दीपम | जौहारी | 58500 | मुंबई | जावा | 3 |
4001 | राजेश | GOUD | 60500 | मुंबई | परीक्षण | 4 |
4002 | अश्विनी | बगत | 54500 | नोएडा | जावा | 3 |
SQL में, लेन-देन शुरू करने के लिए START TRANSACTION क्वेरी का उपयोग किया जाता है।
START TRANSACTION;
अब, हम मौजूदा कर्मचारी तालिका में दो रिकॉर्ड डालेंगे। एकाधिक रिकॉर्ड सम्मिलित करने के लिए हम नीचे दिए गए कथन का उपयोग करेंगे:
INSERT INTO EMPLOYEES (EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY, DEPARTMENT, MANAGERID) VALUES (4003, 'PURVA', 'DHANDEKAR', 57000, 'PUNE', 'TESTING', 4), (5001, 'ASHWIN', 'PATEL', 54500, 'JAIPUR', 'JAVA', 3);
अब हम SELECT क्वेरी का उपयोग यह सत्यापित करने के लिए करेंगे कि रिकॉर्ड सफलतापूर्वक तालिका में डाले गए हैं या नहीं।
SELECT * FROM EMPLOYEES;
उपरोक्त क्वेरी पर आउटपुट:
कर्मचारी | FIRST_NAME | LAST_NAME | वेतन | शहर | विभाग | मैनेजरिड |
1001 | वैभवी | मिश्रा | 65000 | पुणे | ओरेकल | 1 |
1002 | वैभव | शर्मा | 60000 | नोएडा | ओरेकल | 1 |
1003 | निखिल | वाणी | 50000 | जयपुर | FMW | 2 |
2001 | प्राची | शर्मा | 55500 | चंडीगढ़ | ओरेकल | 1 |
2002 | भावेश | जैन | 65500 | पुणे | FMW | 2 |
2003 | रुचिका | जैन | 50000 | मुंबई | परीक्षण | 4 |
3001 | प्रानोटी | शेंडे | 55500 | पुणे | जावा | 3 |
3002 | अनुजा | WANRE | 50500 | जयपुर | FMW | 2 |
3003 | दीपम | जौहारी | 58500 | मुंबई | जावा | 3 |
4001 | राजेश | GOUD | 60500 | मुंबई | परीक्षण | 4 |
4002 | अश्विनी | बगत | 54500 | नोएडा | जावा | 3 |
4003 | पूर्वा | धंडेकर | 5700 | पुणे | परीक्षण | 4 |
5001 | अश्विन | पटेल | 54500 | जयपुर | जावा | 3 |
जैसा कि हम सभी जानते हैं, SQL में SAVEPOINT कमांड का उपयोग एक ही लेनदेन के विभिन्न भागों को बचाने के लिए किया जाता है। मान लें, निवेशन हमारे लेन-देन का एक खंड है। इस इंसर्शन सेगमेंट को इंसर्शन के रूप में सेव करने के लिए सेवपॉइंट का इस्तेमाल करें।
SAVEPOINT Insertion;
अब, हम कर्मचारी टेबल पर UPDATE ऑपरेशन करेंगे, और हम कर्मचारी आईडी 2003 के लिए कर्मचारी वेतन 1.2 से अपडेट करेंगे।
UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;
हम कर्मचारी टेबल पर सेलेक्ट क्वेरी को निष्पादित करके अपडेट ऑपरेशन को क्रॉस-चेक करेंगे:
SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
कर्मचारी | FIRST_NAME | LAST_NAME | वेतन | शहर | विभाग | मैनेजरिड |
2003 | रुचिका | जैन | 60000 | मुंबई | परीक्षण | 4 |
उपरोक्त क्वेरी परिणाम दिखाते हैं कि कर्मचारी आईडी 2003 रिकॉर्ड सफलतापूर्वक अपडेट किया गया है।
हमारे लेन-देन के एक खंड के रूप में अद्यतन क्वेरी पर विचार करें। हम एक अद्यतन नाम के SAVEPOINT का उपयोग करके अद्यतन संचालन भाग को सहेजेंगे।
SAVEPOINT Updation;
अब, हम कर्मचारी टेबल पर एक डिलीट ऑपरेशन करेंगे। हम कर्मचारी टेबल पर डिलीट ऑपरेशन करेंगे जहां कर्मचारी का वेतन 60000 से अधिक है।
DELETE FROM EMPLOYEES WHERE SALARY > 60000;
हम कर्मचारी टेबल पर सेलेक्ट क्वेरी को निष्पादित करके डिलीट ऑपरेशन को क्रॉस-चेक करेंगे:
SELECT * FROM EMPLOYEES;
उपरोक्त क्वेरी पर आउटपुट:
कर्मचारी | FIRST_NAME | LAST_NAME | वेतन | शहर | विभाग | मैनेजरिड |
1002 | वैभव | शर्मा | 60000 | नोएडा | ओरेकल | 1 |
1003 | निखिल | वाणी | 50000 | जयपुर | FMW | 2 |
2001 | प्राची | शर्मा | 55500 | चंडीगढ़ | ओरेकल | 1 |
2003 | रुचिका | जैन | 60000 | मुंबई | परीक्षण | 4 |
3001 | प्रानोटी | शेंडे | 55500 | पुणे | जावा | 3 |
3002 | अनुजा | WANRE | 50500 | जयपुर | FMW | 2 |
3003 | दीपम | जौहारी | 58500 | मुंबई | जावा | 3 |
4002 | अश्विनी | बगत | 54500 | नोएडा | जावा | 3 |
4003 | पूर्वा | धंडेकर | 5700 | पुणे | परीक्षण | 4 |
5001 | अश्विन | पटेल | 54500 | जयपुर | जावा | 3 |
उपरोक्त क्वेरी से पता चलता है कि कर्मचारी रिकॉर्ड हटाना सफल रहा।
हमारे लेन-देन के एक खंड के रूप में हटाए गए प्रश्नों पर विचार करें। हम एक डिलीट नाम के SAVEPOINT का उपयोग करके अपडेट ऑपरेशन पार्ट को सेव करेंगे।
SAVEPOINT Deletion;
अचानक उपयोगकर्ता को एहसास हुआ कि हम जिस क्वेरी को हटाना चाहते हैं, वह वह क्वेरी नहीं थी। ऐसी स्थिति में, उपयोगकर्ता पूरे लेन-देन को SAVEPOINT पर वापस ले आएंगे; उपयोगकर्ता किसी भी SAVEPOINT पर वापस रोल कर सकता है जिसे वह इंसर्शन, अपडेशन SAVEPOINT की तरह रोल बैक करना चाहता है।
ROLLBACK TO Insertion;
यदि उपयोगकर्ता रिकॉर्ड्स को हटाना नहीं चाहता है। इसलिए, उपयोगकर्ता को निवेशन SAVEPOINT पर वापस ले लिया जाएगा।
क्रॉस-चेक करने के लिए कि हमें वही कर्मचारी तालिका मिली है जो हमारे पास अपडेशन और डिलीशन ऑपरेशन करने से पहले थी। कर्मचारियों के विवरण को पुनः प्राप्त करने के लिए कर्मचारियों की मेज पर सेलेक्ट ऑपरेशन करें।
SELECT * FROM EMPLOYEES;
कर्मचारी | FIRST_NAME | LAST_NAME | वेतन | शहर | विभाग | मैनेजरिड |
1001 | वैभवी | मिश्रा | 65000 | पुणे | ओरेकल | 1 |
1002 | वैभव | शर्मा | 60000 | नोएडा | ओरेकल | 1 |
1003 | निखिल | वाणी | 50000 | जयपुर | FMW | 2 |
2001 | प्राची | शर्मा | 55500 | चंडीगढ़ | ओरेकल | 1 |
2002 | भावेश | जैन | 65500 | पुणे | FMW | 2 |
2003 | रुचिका | जैन | 50000 | मुंबई | परीक्षण | 4 |
3001 | प्रानोटी | शेंडे | 55500 | पुणे | जावा | 3 |
3002 | अनुजा | WANRE | 50500 | जयपुर | FMW | 2 |
3003 | दीपम | जौहारी | 58500 | मुंबई | जावा | 3 |
4001 | राजेश | GOUD | 60500 | मुंबई | परीक्षण | 4 |
4002 | अश्विनी | बगत | 54500 | नोएडा | जावा | 3 |
4003 | पूर्वा | धंडेकर | 5700 | पुणे | परीक्षण | 4 |
5001 | अश्विन | पटेल | 54500 | जयपुर | जावा | 3 |