आपको जो कुछ करने की ज़रूरत है वह यह है कि आपके द्वारा बनाई गई दौड़ की स्थिति को रोकने के लिए यहां किसी प्रकार का लॉक जोड़ें:
UPDATE persons SET processing=1 WHERE id=:id AND processing=0
इससे इसे डबल-लॉक करने से बचा जा सकेगा।
इसे और बेहतर बनाने के लिए, एक लॉक कॉलम बनाएं जिसका उपयोग आप दावा करने के लिए कर सकते हैं:
UPDATE persons
SET processing=:processing_uuid
WHERE processing IS NULL
LIMIT 1
इसके लिए VARCHAR
. की आवश्यकता है , अनुक्रमित processing
यह दावा करने के लिए उपयोग किया जाने वाला कॉलम है कि NULL
. का डिफ़ॉल्ट है . यदि आप परिणामों में एक पंक्ति को संशोधित करते हैं, तो आपने एक रिकॉर्ड का दावा किया है और आप इसका उपयोग करके इसके साथ काम कर सकते हैं:
SELECT * FROM persons WHERE processing=:processing_uuid
हर बार जब आप कोशिश करते हैं और दावा करते हैं, तो एक नई दावा UUID कुंजी उत्पन्न करें।