SQL कथन परमाणु हैं। यानी, अगर आप कुछ इस तरह निष्पादित करते हैं:
UPDATE Cars SET Sold = Sold + 1
कोई भी Sold
को बदल नहीं सकता इस कथन के दौरान परिवर्तनशील। यह हमेशा 1 से बढ़ता है, भले ही कोई अन्य व्यक्ति समान कथन को समवर्ती रूप से निष्पादित कर रहा हो।
समस्या तब होती है जब आपके पास ऐसे कथन होते हैं जो एक दूसरे पर निर्भर करते हैं:
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
इन प्रश्नों के बीच, कोई अन्य उपयोगकर्ता कार तालिका को बदल सकता है और बिक गया अपडेट कर सकता है। इसे रोकने के लिए, इसे लेन-देन में लपेटें:
BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;
लेन-देन InnoDB द्वारा समर्थित हैं, लेकिन MyISAM द्वारा नहीं।