मैं मूल रूप से एक पंक्ति पर एक म्यूटएक्स अनुकरण करने के लिए MySQL पंक्ति लॉकिंग का उपयोग करने का प्रयास कर रहा हूं। आइए कहें कि मेरी तालिका में 2 कॉलम, एक आईडी और एक टेक्स्ट फ़ील्ड है, और तीन प्रविष्टियां (1, ए) (2, बी) और (3, सी) हैं। तालिका से चुनें; इन परिणामों को वापस कर देगा। मैं एक सामान्य पंक्ति को सामान्य तरीके से लॉक कर सकता हूं।जानबूझकर एक MySQL पंक्ति को कैसे लॉक करें जैसे कि SELECT भी एक त्रुटि लौटाएगा?
START TRANSACTION;
BEGIN;
SELECT * FROM table WHERE id = '2' FOR UPDATE;
हालांकि, यदि दूसरे कनेक्शन से मैं तालिका से * चयन करना था। यह सभी 3 परिणाम वापस कर देगा। क्या लॉक लॉक होने वाली पंक्ति को देखने/उपयोग करने से मूल रूप से किसी भी चयन को रोकने के लिए पंक्ति स्तर लॉकिंग का कोई तरीका है? असल में मैं किसी को उस पंक्ति का उपयोग करने से रोकने की कोशिश कर रहा हूं जिसका वर्तमान में उपयोग किया जा रहा है/छेड़छाड़ की जा रही है, या यहां तक कि पंक्ति को इसके डेटा के रूप में भी देख रहा है (क्योंकि इसका उपयोग/उपयोग किया जा रहा है) को चयन के समय सटीक होने पर भरोसा नहीं किया जा सकता ।
मैं सिर्फ उत्सुक था कि डेटाबेस से यह संभव था या नहीं। जैसा कि मेरी वर्तमान विधि थोड़ा उलझन में महसूस किया। परियोजना बहुप्रचारित है, और प्रत्येक थ्रेड को डेटाबेस से काम का चयन करने की आवश्यकता होती है (काम को कई अलग-अलग क्षेत्रों से लगातार जोड़ा जाता है), हालांकि, एक ही समय में एक ही काम को एक ही काम का प्रयास नहीं करना चाहिए, इसलिए मेरा वर्तमान समाधान एक म्यूटेक्स था एक कार्य जो उपलब्ध काम का चयन करता है, और उसके बाद उन पंक्तियों को विशेष रूप से यह कहने के लिए अद्यतन किया जाता है कि उन्हें म्यूटेक्स जारी करने से पहले काम किया जा रहा है। मुझे लगता है कि मैं पहले से ही सबसे अच्छा समाधान कर रहा हूं। – bahhumbug