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

MyISAM और InnoDB में एकल mysql कथन परमाणु हैं?

हाँ और नहीं :-)

दोनों ही मामलों में, पहुंच को क्रमबद्ध किया जाता है (यह मानते हुए कि आप InnoDB जैसे ट्रांजेक्शनल इंजन का उपयोग कर रहे हैं) क्योंकि वे एक ही पंक्ति से टकराते हैं, इसलिए वे एक दूसरे के साथ हस्तक्षेप नहीं करेंगे। दूसरे शब्दों में, कथन हैं परमाणु।

हालांकि, जब आप कनेक्शन खोलते हैं तो प्रभावित पंक्तियों की संख्या वास्तव में आपके कॉन्फ़िगरेशन सेट पर निर्भर करती है। mysql_induced_rows() के लिए पेज यह कहना है (मेरा बोल्ड):

और mysql_real_connect पेज से :

तो, क्या होता है साथ . के संदर्भ में CLIENT_FOUND_ROWS कॉन्फ़िगर किया जा रहा है, इसके लिए प्रभावित पंक्तियाँ:

UPDATE T1 SET C1 = 'dirty' WHERE id = 1

कुछ नहीं यह करने के लिए कि क्या डेटा बदला गया है, केवल वही पंक्तियाँ मिलान हुई। यह दोनों प्रश्नों के लिए 1 होगा।

दूसरी ओर, यदि CLIENT_FOUND_ROWS था नहीं सेट, दूसरी क्वेरी वास्तव में पंक्ति को नहीं बदलेगी (क्योंकि यह पहले से ही 'गंदे' से आबाद है) और इसकी पंक्ति संख्या शून्य होगी।

अगर आप समान . चाहते थे व्यवहार उस सेटिंग की परवाह किए बिना (केवल परिवर्तन दिखा रहा है), आप कुछ इस तरह का उपयोग कर सकते हैं:

UPDATE T1 SET C1 = 'dirty' WHERE id = 1 AND C1 <> 'dirty'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक .CSV फ़ाइल से MySQL डीबी में उत्पादों की तुलना/सम्मिलित/अपडेट करने का सबसे अच्छा तरीका क्या है

  2. कैसे जुड़ें कई संबंध तालिका हैं और टाइप करके परिणाम प्राप्त करें

  3. MySQL:दशमलव डेटा प्रकार का आकार

  4. लार्वा वाक्पटु मॉडल द्वारा तीन तालिका में कैसे शामिल हों

  5. कोडनिर्देशक - रूटिंग पर एक्सेस मॉडल और डेटाबेस