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

यह सुनिश्चित करने के लिए कि फ़ील्ड में वृद्धि करते समय MySQL डेटाबेस में कोई दौड़ की स्थिति नहीं है?

यहां 3 अलग-अलग तरीके दिए गए हैं:

परमाणु अद्यतन

update table set tries=tries+1 where condition=value;

और यह परमाणु रूप से किया जाएगा।

लेन-देन का उपयोग करें

यदि आपको पहले मूल्य का चयन करने और इसे अपने आवेदन में अपडेट करने की आवश्यकता है, तो आपको लेनदेन का उपयोग करने की आवश्यकता हो सकती है। इसका मतलब है कि आपको InnoDB का उपयोग करना होगा, MyISAM तालिकाओं का नहीं। आपकी क्वेरी कुछ इस तरह होगी:

BEGIN; //or any method in the API you use that starts a transaction
select tries from table where condition=value for update;
.. do application logic to add to `tries`
update table set tries=newvalue where condition=value;
END;

यदि लेन-देन विफल हो जाता है, तो आपको इसे मैन्युअल रूप से पुनः प्रयास करने की आवश्यकता हो सकती है।

संस्करण योजना

एक सामान्य तरीका यह है कि आप अपनी तालिका में एक संस्करण कॉलम पेश करें। आपके प्रश्न कुछ ऐसा करेंगे:

select tries,version from table where condition=value;
.. do application logic, and remember the old version value.
update table set tries=newvalue,version=version + 1 where condition=value and version=oldversion;

यदि वह अपडेट विफल हो जाता है / प्रभावित 0 पंक्तियाँ लौटाता है, तो किसी और ने इस बीच तालिका को अपडेट कर दिया है। आपको पूरी तरह से शुरू करना होगा - यानी, नए मानों का चयन करें, एप्लिकेशन लॉजिक करें और फिर से अपडेट का प्रयास करें।



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

  2. MySQL:किसी अन्य फ़ील्ड के आधार पर अनुक्रम कॉलम जोड़ें

  3. Laravel 5 OR कंडीशन के साथ BETWEEN . का उपयोग कर रहा है

  4. काढ़ा स्थापित करें mysql, सर्वर को रोकने की कोशिश करते समय त्रुटि

  5. टेलीफोन नंबर और पते के लिए mysql डेटाटाइप