अपडेट करें
पंक्ति को लॉक करता है, इसलिए आपको इसे पहले लॉक करने की आवश्यकता नहीं है। अगर आप अपडेट
करने की कोशिश करते हैं एक साथ पंक्तियों के अतिव्यापी सेट, दूसरा अद्यतन करें
पहले लेन-देन के प्रतिबद्ध होने या वापस रोल करने की प्रतीक्षा करेगा।
आपके दृष्टिकोण के साथ बड़ी समस्या - इस तथ्य के अलावा कि अद्यतन करें
कोई LIMIT
नहीं है खंड - यह है कि कई कार्यकर्ता सभी एक ही पंक्तियों को हथियाने की कोशिश करेंगे। यहाँ क्या होता है:
- कार्यकर्ता1:200 पंक्तियों को खोजने के लिए तालिका को फ़िल्टर करें और उन्हें लॉक करें
- कार्यकर्ता1:पंक्तियों को अद्यतन करना प्रारंभ करता है
- worker2:200 पंक्तियों को खोजने के लिए तालिका को फ़िल्टर करें
- worker2:पंक्तियों को अपडेट करना शुरू करने का प्रयास करता है, लेकिन उसी पंक्तियों को कार्यकर्ता1 के रूप में चुना है ताकि यह कार्यकर्ता1 के लॉक पर ब्लॉक हो जाए
- worker1:पंक्तियों को अपडेट करना समाप्त करता है
- worker2:लॉक रिलीज होने के बाद, WHERE कंडीशन को फिर से चेक करें और पता करें कि कोई भी लाइन अब मेल नहीं खाती है क्योंकि वर्कर1 ने उन्हें अपडेट कर दिया है। शून्य पंक्तियों को अपडेट करता है।
... और दोहराएं!
आपको या तो चाहिए:
- एक केंद्रीय कतार रखें पंक्तियों को उचित समवर्ती-सुरक्षित तरीके से सौंपना; या
- कर्मचारियों को काम करने के लिए आईडी की गैर-अतिव्यापी श्रेणी असाइन करें
जहां तक LIMIT
का संबंध है - आप उपयोग कर सकते हैं - लेकिन आपको अपडेट करने के लिए पंक्तियों के एक ही सेट को चुनने वाले दोनों कर्मचारियों के साथ एक ही समस्या होगी।