Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

कुछ पंक्तियों को कैसे लॉक करें क्योंकि उन्हें अन्य लेनदेन में नहीं चुना जाता है

ऐसा लगता है कि पंक्तियों को "उपयोग में" के रूप में पहचानने के लिए आपको किसी प्रकार के मार्कर की आवश्यकता है, इसलिए अन्य उदाहरण समान डेटा को संसाधित नहीं करते हैं; चाहे आप बूलियन का उपयोग करें या दिनांक प्रकार अप्रासंगिक है, किसी तरह आपको उपयोग में आने वाली पंक्तियों को चिह्नित करना होगा।

आप इसे या तो एक डिस्पैचर, एक प्रक्रिया या थ्रेड के माध्यम से कर सकते हैं जिसमें आपकी तालिका तक एकमात्र पहुंच हो और जिसका काम केवल पंक्तियों का चयन करना और उन्हें काम करने के लिए अन्य प्रक्रियाओं में पास करना है। फिर भी डिस्पैचर को यह जानना होगा कि उनके पास कितना डेटा है जिससे आप उसी समस्या पर वापस आ गए हैं।

एक अन्य तरीका यह है कि पंक्ति को इंगित करने के लिए फ़ील्ड का उपयोग किया जा रहा है (जैसा कि आपने अपने प्रश्न में कहा है)। प्रत्येक प्रक्रिया एक अद्वितीय आईडी के साथ पंक्तियों के एक ब्लॉक को अपडेट करती है, जो तालिका को लॉक करने के लिए लेनदेन के अंदर की जाती है; मैं CONNECTION_ID() . से लौटाए गए कनेक्शन नंबर का उपयोग करूंगा उन्हें चिह्नित करने के लिए, तो आप जानते हैं कि यह अद्वितीय है।

UPDATE ... WHERE connection_id IS NULL (एक सीमा लागू होने के साथ) लेन-देन पूरा हो गया है प्रक्रिया SELECT ... WHERE connection_id = CONNECTION_ID() प्रसंस्करण के लिए उनकी पंक्तियाँ प्राप्त करने के लिए।

जब वे अपना काम पूरा कर लेते हैं तो पूरा चक्र फिर से पंक्तियों के अगले सेट को चिह्नित करने के लिए फिर से शुरू हो जाता है जब तक कि सभी संसाधित नहीं हो जाते।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL ENUM प्रकार बनाम टेबल में शामिल हों

  2. स्क्रैच से पायथन फ्लास्क और MySQL का उपयोग करके एक वेब ऐप बनाना:भाग 4

  3. MySQL डेटाबेस से कुछ गूंजें

  4. MySQL 4.1.x + Connector/J . के साथ बड़े परिणाम सेट को स्ट्रीम करना

  5. विदेशी कुंजी बाधा जोड़ने के लिए MySQL तालिका को बदलने से त्रुटियां होती हैं