2013-02-08 14 views
9

मेरे पास MySQL तालिका ताले के बारे में एक छोटी जिज्ञासा है।MySQL एकाधिक तालिका ताले

कहें कि मैं दो टेबल लॉक करना चाहता हूं। मैं इस आदेश पर अमल:

LOCK TABLES table1 WRITE, table2 WRITE 

और फिर मैं टेबल वास्तव में क्रियान्वित करते हुए बंद कर दिया गया है अगर जाँच:

SHOW OPEN TABLES IN mydatabase WHERE In_use > 0 

मैंने ध्यान दिया है यद्यपि कि अगर मैं दो चलाने ताला उदाहरण के लिए sequentitally आदेश:

LOCK TABLES table1 WRITE 
LOCK TABLES table2 WRITE 

और फिर जांचें कि कौन सी टेबल एक ही कमांड का उपयोग कर लॉक कर दी गई है केवल table2 को लॉक के रूप में चिह्नित किया गया है। ऐसा क्यों है?

धन्यवाद

उत्तर

7

LOCK TABLES वह लेन-देन सुरक्षित नहीं है और परोक्ष टेबल लॉक करने के लिए प्रयास करने से पहले किसी भी सक्रिय लेन-देन करता है।

तो, पहले मामले में, आप एक लेन-देन जो 2 टेबल पकड़ बंद कर दिया, दूसरा केवल एक में, क्योंकि LOCK TABLES table1 WRITE

0

ताला टेबल पहले प्रदर्शन से पहले सभी तालिकाओं चालू सत्र से बंद कर दिया अनलॉक हो जाएगा प्रतिबद्ध किया गया था निर्दिष्ट ताला तो तालिका 2 को लॉक करने के लिए कॉल तालिका को अनलॉक कर रहा है 1.

संबंधित मुद्दे