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

PHP के माध्यम से MySQL डेडलॉक डिटेक्शन

एक गतिरोध त्रुटि देता है 1213 जिसे आपको क्लाइंट साइड पर प्रोसेस करना चाहिए

ध्यान दें कि गतिरोध और लॉक प्रतीक्षा अलग-अलग चीजें हैं। गतिरोध में, कोई "विफल" लेनदेन नहीं है:वे दोनों दोषी हैं। इस बात की कोई गारंटी नहीं है कि किसे वापस लाया जाएगा।

इस तरह के परिदृश्य में गतिरोध उत्पन्न होता है:

UPDATE  t_first -- transacion 1 locks t_first
SET     id = 1;

UPDATE  t_second -- transaction 2 locks t_second
SET     id = 2;

UPDATE  t_second -- transaction 1 waits for transaction 2 to release the lock on t_second
SET     id = 2;

UPDATE  t_first -- transaction 2 waits for transaction 1 to release the lock on t_first. DEADLOCK
SET     id = 2;

क्या आप वाकई लॉक प्रतीक्षा के साथ इसे भ्रमित नहीं कर रहे हैं?

लॉक प्रतीक्षा तब होती है जब कोई लेन-देन किसी अन्य लेन-देन द्वारा पहले से लॉक किए गए संसाधन को लॉक करने का प्रयास करता है।

ऊपर के उदाहरण में चरण 3 . पर लॉक प्रतीक्षा होती है ।

चूंकि यह एक सामान्य स्थिति है (एक गतिरोध के विपरीत), जिसे लॉक रखने वाले लेन-देन को कम करके या वापस रोल करके बाहर से हल किया जा सकता है, InnoDB लॉक रखने वाले लेनदेन को रोलबैक करने का प्रयास नहीं करेगा।

इसके बजाय, यह केवल उस कथन को रद्द कर देगा जिसने टाइमआउट होने के बाद लॉक प्राप्त करने का प्रयास किया था।

डिफ़ॉल्ट रूप से समयबाह्य 50 . है सेकंड और innodb_lock_wait_timeout

विफल कथन (वह जो अधिग्रहण . करने का प्रयास करता है लॉक) त्रुटि लौटाएगा 1205



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSF 2,1 और Apache Tomcat का उपयोग करके LDAP के साथ लॉगिन करें

  2. MySQL में एक कॉलम का कोलाजेशन कैसे दिखाएं

  3. MySQL में FIELD () और FIND_IN_SET () के बीच अंतर

  4. JDBC और MySQL के साथ संचार लिंक विफलता का समाधान

  5. MySQL के साथ Entity Framework का उपयोग करते समय, यूनिकोड वर्णों को मूल वर्णों से बदल दिया जाता है