Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL प्रतिबद्ध और लेनदेन

InnoDB में, यदि आपने ऑटोकॉमिट की डिफ़ॉल्ट सेटिंग नहीं बदली है, जो "चालू" है, तो आपको एकल प्रश्नों के लिए स्पष्ट रूप से लेनदेन शुरू करने या समाप्त करने की आवश्यकता नहीं है। यदि ऑटोकॉमिट चालू है, तो InnoDB स्वचालित रूप से लेन-देन में प्रत्येक एकल SQL क्वेरी को संलग्न करता है, जो START TRANSACTION; query; COMMIT; .

यदि आप स्पष्ट रूप से START TRANSACTION . का उपयोग करते हैं InnoDB में autocommit के साथ, फिर START TRANSACTION के बाद निष्पादित कोई भी प्रश्न बयान या तो सभी को निष्पादित किया जाएगा, या वे सभी विफल हो जाएंगे। यह बैंकिंग वातावरण में उपयोगी है, उदाहरण के लिए:यदि मैं आपके बैंक खाते में $500 स्थानांतरित कर रहा हूं, तो वह ऑपरेशन तभी सफल होना चाहिए जब राशि को मेरे बैंक बैलेंस से घटाकर आपके खाते में जोड़ दिया गया हो। तो इस मामले में, आप कुछ इस तरह चलाएंगे

START TRANSACTION;
UPDATE customers SET balance = balance - 500 WHERE customer = 'Daan';
UPDATE customers SET balance = balance + 500 WHERE customer = 'Dennis';
COMMIT;

यह सुनिश्चित करता है कि या तो दोनों क्वेरी सफलतापूर्वक चलेंगी, या कोई नहीं, लेकिन केवल एक ही नहीं। यह पोस्ट आपको लेन-देन का उपयोग कब करना चाहिए, इस पर कुछ और है।

InnoDB में, आपको शायद ही कभी पूरे टेबल को लॉक करना होगा; InnoDB, MyISAM के विपरीत, पंक्ति-स्तरीय लॉकिंग का समर्थन करता है। इसका मतलब है कि ग्राहकों को पूरी तालिका को लॉक करने की आवश्यकता नहीं है, जिससे अन्य ग्राहकों को प्रतीक्षा करने के लिए मजबूर होना पड़ता है। ग्राहकों को केवल उन पंक्तियों को लॉक करना चाहिए जिनकी उन्हें वास्तव में आवश्यकता है, जिससे अन्य ग्राहक उन पंक्तियों तक पहुँच जारी रख सकें जिनकी उन्हें आवश्यकता है।

आप InnoDB लेनदेन के बारे में यहां . गतिरोध के बारे में आपके प्रश्नों के उत्तर अनुभागों में दिए गए हैं 14.2.8.8.8 और 14.2.8.9 डॉक्स की। यदि कोई क्वेरी विफल हो जाती है, तो आपका MySQL ड्राइवर कारण बताते हुए एक त्रुटि संदेश लौटाएगा; यदि आवश्यक हो तो आपके ऐप को प्रश्नों को फिर से जारी करना चाहिए।

अंत में, आपके उदाहरण कोड में, आपने mysql_query . का उपयोग किया है . यदि आप नया कोड लिख रहे हैं, तो कृपया पुराने, धीमे, और बहिष्कृत mysql_ का उपयोग करना बंद कर दें PHP के लिए लाइब्रेरी और mysqli_ . का उपयोग करें या इसके बजाय पीडीओ :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डोकर में मैसकल के साथ सीक्वल प्रो

  2. यात्रा स्थल कैसे कमरे को बंद कर देते हैं?

  3. Yii2:पाद लेख में एक कॉलम का कार्तिक ग्रिडव्यू योग

  4. qt 5.8 sql कनेक्शन त्रुटि:QMYSQL ड्राइवर विंडोज़ 10 पर लोड नहीं हुआ

  5. MySQL कार्यक्षेत्र:क्वेरी में त्रुटि (1064):लाइन 1 पर 'दृश्यमान' के पास सिंटैक्स त्रुटि