मैं InnoDB इंजन के साथ एक MySQL में एक मेज v_ext है अद्यतन के लिए सीमा 1:
- आईडी: प्राथमिक कुंजी
- कोड: पूर्व-निर्मित कोड की सूची (कहें 1000 कोड यादृच्छिक रूप से उत्पन्न होते हैं)
- user_id: प्रारंभ में NULLMySQL InnoDB का चयन करें ... बनाम अद्यतन ... सीमा 1
जब कोई उपयोगकर्ता कोई आइटम खरीदता है, तो उन्हें एक कोड प्राप्त होता है। मुझे user_id कॉलम को पॉप्युलेट करने के लिए तालिका को अपडेट करने की आवश्यकता है। अगर मैं उन एक ही समय में खरीद के हजारों है
START TRANSACTION;
SELECT id FROM v_ext WHERE user_id IS NULL LIMIT 1 FOR UPDATE; -- return id 54 for ex.
UPDATE v_ext SET user_id=xxx WHERE id=54;
COMMIT;
या
UPDATE v_ext SET user_id=xxx WHERE user_id IS NULL LIMIT 1;
दूसरा विकल्प सुरक्षित है: मैं दो विकल्प हैं? यदि हां, तो क्या यह मानना सही है कि यह दूसरा विकल्प प्रदर्शन के लिए बेहतर है क्योंकि इसे केवल एक प्रश्न की आवश्यकता है?
क्या 'user_id' पर 'अद्वितीय' बाधा है? (यानी उपयोगकर्ता के पास केवल एक कोड हो सकता है)? – eggyal
'EXISTS' समवर्तीता और प्रदर्शन के संदर्भ में बेहतर उपयोग होगा। – bonCodigo
यूनिक एक बाधा नहीं है, उपयोगकर्ता_आईडी – JScoobyCed