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

MySql तर्क अनुकूलन

समस्या यह है कि आप यह सुनिश्चित करने के लिए MySQL स्तर लॉकिंग का उपयोग करने का प्रयास कर रहे हैं कि टिकट एक से अधिक व्यक्तियों को नहीं सौंपा जा सकता है। इस तरह यह पता लगाने का कोई तरीका नहीं है कि उपयोगकर्ता द्वारा टिकट को लॉक किया गया है या नहीं।

मैं टिकट तालिका में 2 लॉक संबंधित फ़ील्ड जोड़कर एक एप्लिकेशन स्तर लॉक लागू करूंगा:एक टाइमस्टैम्प जब लॉक लगाया गया था और एक उपयोगकर्ता आईडी फ़ील्ड आपको बता रहा था कि कौन सा उपयोगकर्ता लॉक रखता है। लॉक से संबंधित फ़ील्ड को किसी अन्य टेबल में रखा जा सकता है (उदाहरण के लिए, इस उद्देश्य के लिए शॉपिंग कार्ट का उपयोग किया जा सकता है)।

जब कोई उपयोगकर्ता टिकट का चयन करता है, तो आप इन लॉक फ़ील्ड को सशर्त अपडेट स्टेटमेंट के साथ अपडेट करने का प्रयास करते हैं:

update tickets
set lock_time=now(), lock_user=...
where ticket_id=... and lock_time is null

... . के स्थान पर मान आपके आवेदन द्वारा आपूर्ति की जाती है। lock_time is null यह सुनिश्चित करने के लिए मानदंड हैं कि यदि टिकट पहले से ही किसी अन्य उपयोगकर्ता द्वारा चुना गया है, तो बाद वाला उपयोगकर्ता लॉक को ओवरराइड नहीं करता है। अद्यतन विवरण के बाद प्रभावित पंक्तियों की संख्या की जाँच करें। यदि यह एक है, तो वर्तमान उपयोगकर्ता ने लॉक प्राप्त कर लिया है। अगर यह 0 है, तो किसी और ने टिकट लॉक कर दिया है।

यदि आपके पास किसी अन्य तालिका में लॉकिंग डेटा है, तो उस तालिका में टिकट आईडी फ़ील्ड पर एक अद्वितीय प्रतिबंध लगाएं और लॉक प्राप्त करने के लिए सम्मिलित करें का उपयोग करें। यदि इंसर्ट सफल होता है, तो लॉक का अधिग्रहण किया जाता है। यदि यह विफल रहता है, तो दूसरे उपयोगकर्ता ने टिकट लॉक कर दिया है।

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




  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 के लिए कोई ड्राइवर है जो संग्रहीत प्रक्रियाओं का समर्थन करता है?

  2. MySQL COUNT LIMIT . के साथ

  3. MySQL सर्वर को एक सेवा के रूप में प्रारंभ करें (विन 8)

  4. LOAD DATA INFILE क्वेरी का अधिकतम अपलोड फ़ाइल आकार कैसे बढ़ाएं?

  5. MySQL उपयोगकर्ता को होस्ट एक्सेस अनुमति पुन:असाइन करें