आप MySQL में दौड़ की स्थिति को कैसे रोकते हैं? हाथ में समस्या एक सरल एल्गोरिथ्म के कारण होता है:mysql डालने की दौड़ स्थिति
- मेज से एक पंक्ति का चयन
- अगर यह मौजूद नहीं है, यह
और सम्मिलित तो या तो आप एक डुप्लिकेट पंक्ति मिलता है, या यदि आप इसे अद्वितीय/प्राथमिक कुंजी के माध्यम से रोकते हैं, तो एक त्रुटि।
अब आम तौर पर मुझे लगता है कि लेनदेन यहां मदद करते हैं, लेकिन क्योंकि पंक्ति मौजूद नहीं है, लेनदेन वास्तव में मदद नहीं करता है (या मुझे कुछ याद आ रही है?)।
लॉक टेबल एक ओवरकिल की तरह लगता है, खासकर यदि तालिका प्रति सेकंड कई बार अपडेट की जाती है।
एकमात्र अन्य समाधान जो मैं सोच सकता हूं वह हर अलग आईडी के लिए GET_LOCK() है, लेकिन क्या कोई बेहतर तरीका नहीं है? क्या यहां कोई स्केलेबिलिटी समस्या भी नहीं है? और साथ ही, प्रत्येक तालिका के लिए यह करना थोड़ा अप्राकृतिक लगता है, क्योंकि यह मुझे उच्च-समेकन डेटाबेस में एक बहुत ही आम समस्या की तरह लगता है।
इंसर्ट इग्नोर के साथ जाएं। ट्रिगर्स बहुत अधिक ओवरहेड का कारण बनते हैं, वे तब तक इसके लायक नहीं हैं जब तक कि व्यवसाय तर्क जटिल न हो। – captainspi
अनन्य बाधा और पकड़ने वाली त्रुटियों के साथ बस 'INSERT' के साथ क्या गलत है "ठीक है, रिकॉर्ड पहले से मौजूद है।" – KeatsKelleher