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

MySQL InnoDB डेड लॉक SELECT पर एक्सक्लूसिव लॉक के साथ (अद्यतन के लिए)

अपडेट के लिए चुनें रिकॉर्ड पर अनन्य लॉक प्राप्त करने से पहले टेबल पर एक इंटेंट एक्सक्लूसिव लॉक प्राप्त करता है।

इसलिए, इस परिदृश्य में:

X1: SELECT FOR UPDATE -- holds IX, holds X on 'lock_name'
X2: SELECT FOR UPDATE -- holds IX, waits for X on 'lock_name'
X1: INSERT -- holds IX, waits for X for the gap on `id`

एक गतिरोध उत्पन्न होता है, क्योंकि दोनों लेन-देन एक IX . धारण कर रहे हैं टेबल पर लॉक करें और X . की प्रतीक्षा करें रिकॉर्ड पर ताला।

दरअसल, इसी परिदृश्य का वर्णन MySQL लॉक करने पर मैनुअल

इसे हल करने के लिए, आपको उस इंडेक्स को छोड़कर सभी इंडेक्स से छुटकारा पाना होगा, जिसे आप खोज रहे हैं, वह है lock_name

बस प्राथमिक कुंजी को id . पर छोड़ दें ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL कमांड की व्याख्या करें LIMIT को अनदेखा करें?

  2. ऑन क्लॉज में MySQL अज्ञात कॉलम

  3. MySQL ट्रिगर अपडेट के बाद ही अगर पंक्ति बदल गई है

  4. mysql php pdo के साथ डेटाबेस से एक मान वापस करें

  5. PHP MYSQL डायनेमिक सेलेक्ट बॉक्स