SQL डेटाबेस में समवर्ती अद्यतनों से निपटने का सामान्य तरीका क्या है?डेटाबेस में समवर्ती अद्यतनों से कैसे निपटें?
एक सरल एसक्यूएल स्कीमा (की कमी और चूक नहीं दिखाया ..) की तरह
create table credits (
int id,
int creds,
int user_id
);
आशय एक उपयोगकर्ता है, उदा के लिए क्रेडिट किसी तरह का स्टोर करने के लिए है पर विचार करें Stackoverflow की प्रतिष्ठा की तरह कुछ।
उस तालिका के समवर्ती अद्यतनों से कैसे निपटें? कुछ विकल्प:
update credits set creds= 150 where userid = 1;
इस मामले में आवेदन वर्तमान मान पुनर्प्राप्त, नया मान (150) गणना की और एक अद्यतन प्रदर्शन किया। यदि कोई और एक ही समय में एक ही करता है तो आपदा का क्या कारण होता है। मैं अनुमान लगा रहा हूं कि वर्तमान मूल्य के प्रतिरक्षा को लपेटने और लेनदेन में अपडेट करने से यह हल हो जाएगा, उदा।
Begin; select creds from credits where userid=1; do application logic to calculate new value, update credits set credits = 160 where userid = 1; end;
इस मामले में आप जांच सकते हैं कि नया क्रेडिट < 0 होगा और नकारात्मक क्रेडिट को कोई समझ नहीं होने पर इसे 0 पर छोटा कर दें।update credits set creds = creds - 150 where userid=1;
इस मामले में समवर्ती अपडेट के बारे में चिंता करने की डीबी स्थिरता समस्या का ख्याल रखता है, लेकिन कमी थी जिसके कारण creds खुशी से नकारात्मक बन जाएगा, जो कुछ अनुप्रयोगों के लिए कोई औचित्य नहीं है के रूप में की जरूरत नहीं होगी ।
तो बस, ऊपर उल्लिखित (काफी सरल) समस्या से निपटने के लिए स्वीकार्य विधि क्या है, क्या होगा यदि डीबी एक त्रुटि फेंकता है?
यदि आप अपने कॉलम पर बाधाओं का उल्लंघन करने के बारे में चिंतित हैं, तो डेटाबेस में कन्स्ट्रेंट को परिभाषित करें। – jva