Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> MySql

क्या होता है जब हम MySQL संग्रहीत प्रक्रिया में COMMIT का उपयोग करते हैं और लेन-देन में से एक, START लेनदेन के तहत विफल रहता है?


मान लीजिए कि कोई एक क्वेरी विफल हो जाती है या त्रुटि उत्पन्न करती है और दूसरी क्वेरी (यों) को ठीक से निष्पादित किया गया है, MySQL अभी भी ठीक से निष्पादित क्वेरी (क्वेरी) के परिवर्तनों को प्रतिबद्ध करता है। इसे निम्नलिखित उदाहरण से समझा जा सकता है जिसमें हम निम्नलिखित डेटा वाली तालिका 'employee.tbl' का उपयोग कर रहे हैं -

उदाहरण

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Mohan   |
| 2  | Gaurav  |
| 3  | Sohan   |
| 4  | Saurabh |
| 5  | Yash    |
+----+---------+
5 rows in set (0.00 sec)

mysql> Delimiter //

mysql> Create Procedure st_transaction_commit_save()
    -> BEGIN
    -> START TRANSACTION;
    -> INSERT INTO employee.tbl (name) values ('Rahul');
    -> UPDATE employee.tbl set name = 'Gurdas' WHERE id = 10;
    -> COMMIT;
    -> END //
Query OK, 0 rows affected (0.00 sec)

अब, जब हम इस प्रक्रिया को लागू करते हैं, तो हम जानते हैं कि UPDATE क्वेरी एक त्रुटि उत्पन्न करेगी क्योंकि हमारे टेबल पर id =10 नहीं है। लेकिन चूंकि पहली क्वेरी सफलतापूर्वक निष्पादित होगी इसलिए COMMIT तालिका में परिवर्तनों को सहेज लेगा।

mysql> Delimiter ;
mysql> Call st_transaction_commit_save()//
Query OK, 0 rows affected (0.07 sec)

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Mohan   |
| 2  | Gaurav  |
| 3  | Sohan   |
| 4  | Saurabh |
| 5  | Yash    |
| 6  | Rahul   |
+----+---------+
6 rows in set (0.00 sec)

  1. संग्रहीत प्रक्रिया में IF का उपयोग कैसे करें और MySQL में चयन करें?

    आप संग्रहित प्रक्रिया में IF का उपयोग कर सकते हैं और IF() का चयन कथन में भी कर सकते हैं। IF() चुनिंदा स्टेटमेंट में सेलेक्ट करें if(0=0,Hello MySQL,condition is गलत); यह निम्नलिखित आउटपुट देगा - +------------------------------------------ --------+| अगर (टेस्ट =टेस्ट, हैलो MySQL, हालत गलत है) |+--

  1. MySQL संग्रहीत कार्यविधि में "@" प्रतीक का उपयोग क्या है?

    संग्रहीत प्रक्रिया में @ प्रतीक का उपयोग उपयोगकर्ता द्वारा परिभाषित सत्र चर के लिए किया जा सकता है। आइए पहले एक टेबल बनाएं - टेबल बनाएं DemoTable(StudentName varchar(50));क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित (1.30 सेकंड) इंसर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें - डेमोटेबल मानों में डा

  1. एक MySQL संग्रहीत प्रक्रिया में डिलीमीटर का सही ढंग से उपयोग कैसे करें और मान डालें?

    आइए पहले एक टेबल बनाएं - );क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित (0.87 सेकंड) यहाँ एक संग्रहीत कार्यविधि बनाने और मान सम्मिलित करने के लिए क्वेरी है (सही ढंग से सीमांकक का उपयोग करके) - सीमांकक; कॉल कमांड का उपयोग करके संग्रहीत कार्यविधि को कॉल करें - कॉल इन्सर्ट_नाम (क्रिस, ब्राउन); क्वेरी ओके,