क्वेरी हमेशा समानांतर में नहीं चलती हैं
यह डेटाबेस इंजन पर निर्भर करता है। MyISAM के साथ, लगभग हर क्वेरी एक टेबल लेवल लॉक प्राप्त करती है, जिसका अर्थ है कि क्वेरी को एक कतार के रूप में क्रमिक रूप से चलाया जाता है। अधिकांश अन्य इंजनों के साथ वे समानांतर में चल सकते हैं।
echo_me कहता है nothing happens at the exact same time and a CPU does not do everything at once
यह बिल्कुल सच नहीं है। यह संभव है कि एक डीबीएमएस एक से अधिक सीपीयू वाली मशीन पर और एक से अधिक नेटवर्क इंटरफेस के साथ चल सके। यह बहुत है यह असंभव है कि 2 प्रश्न एक ही समय में आ सकते हैं - लेकिन असंभव नहीं है, इसलिए यह सुनिश्चित करने के लिए एक म्यूटेक्स है कि पारिंग/निष्पादन संक्रमण केवल एक थ्रेड के रूप में चलता है (निष्पादन का - अनिवार्य रूप से समान हल्के वजन की प्रक्रिया नहीं)।
समवर्ती डीएमएल को हल करने के लिए 2 दृष्टिकोण हैं - या तो लेनदेन का उपयोग करने के लिए (जहां प्रत्येक उपयोगकर्ता प्रभावी रूप से डेटाबेस का क्लोन प्राप्त करता है) और जब प्रश्नों को पूरा कर लिया जाता है तो डीबीएमएस किसी भी बदलाव को समेटने की कोशिश करता है - यदि सुलह विफल हो जाती है, तो डीबीएमएस इनमें से एक को वापस रोल करता है प्रश्नों और इसे विफल के रूप में रिपोर्ट करता है। दूसरा तरीका रो-लेवल लॉकिंग का उपयोग करना है - डीबीएमएस उन पंक्तियों की पहचान करता है जिन्हें एक क्वेरी द्वारा अपडेट किया जाएगा और उन्हें अपडेट के लिए आरक्षित के रूप में चिह्नित किया जाएगा (अन्य उपयोगकर्ता प्रत्येक पंक्ति के मूल संस्करण को पढ़ सकते हैं लेकिन डेटा को अपडेट करने का कोई भी प्रयास होगा पंक्ति फिर से उपलब्ध होने तक अवरुद्ध)।
आपकी समस्या यह है कि आपके पास दो mysql क्लाइंट हैं, जिनमें से प्रत्येक ने इस तथ्य को पुनः प्राप्त कर लिया है कि स्टॉक का एक आइटम बचा है। यह इस तथ्य से और जटिल है कि (चूंकि आप PHP का उल्लेख करते हैं) स्टॉक स्तर बाद के स्टॉक समायोजन की तुलना में एक अलग डीबीएमएस सत्र में पुनर्प्राप्त किए गए हो सकते हैं - आपके पास HTTP अनुरोध से अधिक लेनदेन नहीं हो सकता है। इसलिए आपको एक ही लेन-देन के भीतर DBMS के बाहर रखे गए किसी भी तथ्य को फिर से सत्यापित करने की आवश्यकता है।
आशावादी लॉकिंग एक छद्म लेनदेन नियंत्रण तंत्र बना सकता है - आप एक रिकॉर्ड को ध्वजांकित करते हैं जिसे आप टाइमस्टैम्प और उपयोगकर्ता पहचानकर्ता के साथ संशोधित करने वाले हैं (PHP के साथ PHP सत्र आईडी एक अच्छा विकल्प है) - यदि आप इसे संशोधित करने के लिए आते हैं, तो कुछ और इसे बदल दिया है, तो आपका कोड जानता है कि इससे पहले पुनर्प्राप्त किया गया डेटा अमान्य है। हालांकि इससे अन्य जटिलताएं हो सकती हैं।