- गंदा पढ़ता है : दूसरे लेनदेन से UNCOMMITED डेटा पढ़ें
- गैर-दोहराने योग्य रीड :
UPDATE
किसी अन्य ट्रांज़ेक्शन के क्वेरी सेकमिटेड डेटा पढ़ें
- प्रेत पढ़ता है :किसी अन्य लेन-देन से एक क्वेरी
INSERT
यासंचारित डेटा पढ़ेंDELETE
नोट : किसी अन्य लेन-देन से DELETE विवरण, कुछ मामलों में गैर-दोहराने योग्य रीड के कारण होने की बहुत कम संभावना है। यह तब होता है जब DELETE कथन दुर्भाग्य से, उसी पंक्ति को हटा देता है जिसे आपका वर्तमान लेनदेन क्वेरी कर रहा था। लेकिन यह एक दुर्लभ मामला है, और एक डेटाबेस में होने की संभावना नहीं है, जिसकी प्रत्येक तालिका में लाखों पंक्तियाँ हैं। लेनदेन डेटा वाले तालिकाओं में आमतौर पर किसी भी उत्पादन वातावरण में उच्च डेटा मात्रा होती है।
हम यह भी देख सकते हैं कि वास्तविक इनसेट या DELETES के बजाय ज्यादातर उपयोग के मामलों में UPDATES अधिक लगातार काम हो सकता है (ऐसे मामलों में, गैर-दोहराने योग्य रीड का खतरा केवल बना रहता है - उन मामलों में प्रेत रीड संभव नहीं हैं)। यही कारण है कि UPDATES को INSERT-DELETE से अलग तरीके से व्यवहार किया जाता है और परिणामस्वरूप विसंगति को भी अलग नाम दिया जाता है।
यूपीडेट्स को संभालने के बजाय INSERT-DELETEs से निपटने के लिए एक अतिरिक्त प्रसंस्करण लागत भी है।
- READ_UNCOMMITTED कुछ नहीं रोकता है। यह शून्य अलगाव स्तर है
- READ_COMMITTED सिर्फ एक को रोकता है, यानी डर्टी रीड
- REPEATABLE_READ दो विसंगतियों को रोकता है: गंदा पढ़ता है और गैर-दोहराने योग्य पढ़ता है
- अनुक्रमिक तीनों विसंगतियों को रोकता है: डर्टी रीड्स, नॉन-रिपीटेबल रीड्स और फैंटम रीड्स
तो फिर हर समय केवल लेनदेन को ही क्यों न करें? ठीक है, उपरोक्त प्रश्न का उत्तर है: अनुक्रमिक सेटिंग लेनदेन को बहुत धीमा कर देती है , जिसे हम फिर से नहीं चाहते हैं।
वास्तव में लेन-देन के समय की खपत निम्न दर में है:
अनुक्रमिक > REPEATABLE_READ > READ_COMMITTED > READ_UNCOMMITTED
तो READ_UNCOMMITTED सेटिंग सबसे तेज़ है ।
सारांश
वास्तव में हमें उपयोग के मामले का विश्लेषण करने और एक अलगाव स्तर तय करने की आवश्यकता है ताकि हम लेनदेन के समय का अनुकूलन कर सकें और अधिकांश विसंगतियों को भी रोक सकें।
ध्यान दें कि डिफ़ॉल्ट रूप से डेटाबेस में REPEATABLE_READ सेटिंग है।