MySQL में आशावादी लॉकिंग को सही तरीके से कैसे लागू किया जाता है?
हमारी टीम ने यह घटाया है कि हमें नीचे # 4 करना होगा वरना एक जोखिम है कि एक और धागा रिकॉर्ड के एक ही संस्करण को अपडेट कर सकता है, लेकिन हम यह सत्यापित करना चाहेंगे कि यह करने का सबसे अच्छा तरीका है।
- आप जिस स्तंभ नाम = "संस्करण" के लिए आशावादी लॉकिंग का उपयोग करना चाहते हैं उस तालिका पर एक संस्करण फ़ील्ड बनाएं
- चयन करने पर, संस्करण कॉलम को शामिल करना और संस्करण का नोट बनाना सुनिश्चित करें
- रिकॉर्ड के बाद के अपडेट के लिए, अपडेट स्टेटमेंट में "कहां वर्जन = एक्स" जारी करना चाहिए, जहां एक्स वह वर्जन है जो हमने # 2 में प्राप्त किया है और उस अपडेट स्टेटमेंट के दौरान एक्स + 1 में वर्जन फील्ड सेट करें
SELECT FOR UPDATE
हम जिस रिकॉर्ड को अपडेट करने जा रहे हैं, उस पर प्रदर्शन करें ताकि हम अनुक्रमित करें कि हम उस रिकॉर्ड में बदलाव कर सकते हैं जिसे हम अपडेट करने की कोशिश कर रहे हैं।
स्पष्ट करने के लिए, हम दो थ्रेड्स को रोकने की कोशिश कर रहे हैं जो एक ही समय विंडो में एक ही रिकॉर्ड का चयन करते हैं जहां वे रिकॉर्ड के एक ही संस्करण को एक-दूसरे से अधिलेखित करते हैं यदि वे एक ही समय में रिकॉर्ड को अपडेट करने और अपडेट करने के लिए थे। हम मानते हैं कि जब तक हम # 4 नहीं करते हैं, एक मौका है, कि अगर दोनों धागे एक ही समय में अपने संबंधित लेनदेन में प्रवेश करते हैं (लेकिन अभी तक अपने अपडेट जारी नहीं किए हैं), जब वे अपडेट करने जाते हैं, तो दूसरा धागा जो UPDATE का उपयोग करेगा ... जहां संस्करण = X पुराने डेटा पर काम कर रहा होगा।
क्या हम यह सोचकर सही हैं कि हम इस निराशावादी लॉकिंग को अपडेट करते समय करना चाहिए, भले ही हम संस्करण फ़ील्ड / आशावादी लॉकिंग का उपयोग कर रहे हों?
SELECT ... FOR UPDATE
या आशावादी लॉकिंग की आवश्यकता है , दोनों नहीं। विस्तार से देखें उत्तर