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

क्या यह डेटाबेस को लॉक करता है?

मेरे लिए, दस्तावेज़ीकरण थोड़ा अस्पष्ट है:

आंतरिक लॉक करने के तरीके सुझाव देता है कि, कुछ परिस्थितियों में, एक MyISAM तालिका में सम्मिलित करना संभव है, जबकि दूसरा सत्र इससे पढ़ रहा है:

हालांकि, टेबल लॉक करने से जुड़ी समस्याएं एक ऐसी स्थिति दिखाता है जहां चयन पूरा होने तक तालिका लॉक हो जाएगी (यह आपकी स्थिति के साथ फिट बैठती है):

InnoDB तालिका पंक्ति-स्तरीय ताले को लागू करती है, इसलिए पूरी तालिका के बजाय केवल पढ़ी जा रही पंक्ति को ही लॉक किया जाएगा।

केवल दस्तावेज़ीकरण पर निर्भर रहने के बजाय, मैंने एक छोटे से परीक्षण की कोशिश की:

  1. एक ही संरचना के साथ दो टेबल बनाएं:table_a और table_b
  2. table_aभरें 500,000 पंक्तियों के साथ।
  3. table_a से डेटा कॉपी करें table_b . के लिए एक INSERT INTO ... SELECT . का उपयोग करके बयान।
  4. प्रतिलिपि प्रक्रिया के दौरान, table_a . में एक नई पंक्ति डालने के लिए दूसरे सत्र का उपयोग करें ।
  5. जांचें कि क्या table_b नया रिकॉर्ड शामिल है।

जब दोनों टेबल जहां MyISAM, table_b कॉपी के बाद नया रिकॉर्ड नहीं था। जब दोनों टेबल जहां InnoDB, table_b में कॉपी के बाद नया रिकॉर्ड शामिल था। मैंने इसे तीन बार दोहराया है, और, जैसा कि अपेक्षित था, परिणाम हर बार समान था।

तो, संक्षेप में, यदि आपकी तालिका MyISAM है, तो इसे लॉक कर दिया जाएगा। यदि यह InnoDB है, तो यह नहीं होगा। बेशक, यह परीक्षण अपडेट पर विचार नहीं करता है, लेकिन मुझे उम्मीद है कि परिणाम समान होंगे।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या COUNT रिकॉर्ड को खींचने और कोड में गिनने की तुलना में तेज़ है?

  2. MySql DB में डेटा डालें और प्रदर्शित करें कि क्या सम्मिलन सफल या विफलता है

  3. DATE_SUB () उदाहरण – MySQL

  4. घातक त्रुटि:बूलियन पर सदस्य फ़ंक्शन fetch_array () पर कॉल करें

  5. MySQL में UTF8 कैरेक्टर कैसे स्टोर करें?