अपडेट के लिए चुनें
रिकॉर्ड पर अनन्य लॉक प्राप्त करने से पहले टेबल पर एक इंटेंट एक्सक्लूसिव लॉक प्राप्त करता है।
इसलिए, इस परिदृश्य में:
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
. पर छोड़ दें ।