विकिपीडिया से (जिसमें इसके लिए महान और विस्तृत उदाहरण हैं):
<ब्लॉकक्वॉट>एक गैर-दोहराने योग्य रीड तब होता है, जब लेन-देन के दौरान, एक पंक्ति को दो बार पुनर्प्राप्त किया जाता है और पंक्ति के भीतर मान रीड के बीच भिन्न होते हैं।
और
<ब्लॉकक्वॉट>एक फ़ैंटम रीड तब होता है, जब लेन-देन के दौरान, दो समान क्वेरी निष्पादित की जाती हैं, और दूसरी क्वेरी द्वारा लौटाई गई पंक्तियों का संग्रह पहले से अलग होता है।
सरल उदाहरण:
- उपयोगकर्ता A एक ही क्वेरी को दो बार चलाता है।
- बीच में, उपयोगकर्ता B एक लेन-देन करता है और प्रतिबद्ध होता है।
- गैर-दोहराए जाने योग्य पठन:उपयोगकर्ता A द्वारा क्वेरी की गई A पंक्ति का दूसरी बार एक अलग मान है।
- फैंटम रीड:क्वेरी में सभी पंक्तियों का मान पहले और बाद में समान है, लेकिन अलग-अलग पंक्तियों का चयन किया जा रहा है (क्योंकि बी ने कुछ हटा दिया है या डाला है)। उदाहरण:
select sum(x) from table;
यदि पंक्तियों को जोड़ा या हटा दिया गया है, तो प्रभावित पंक्तियों में से कोई भी स्वयं अपडेट नहीं किया गया है, भले ही एक अलग परिणाम लौटाएगा।
उपरोक्त उदाहरण में, किस आइसोलेशन स्तर का उपयोग किया जाए?
आपको किस अलगाव स्तर की आवश्यकता है यह आपके आवेदन पर निर्भर करता है। "बेहतर" अलगाव स्तर (जैसे कम समवर्ती) के लिए एक उच्च लागत है।
आपके उदाहरण में, आपके पास एक प्रेत पढ़ा नहीं होगा, क्योंकि आप केवल एक पंक्ति से चयन करते हैं (प्राथमिक कुंजी द्वारा पहचाना जाता है)। आपके पास गैर-दोहराने योग्य पठन हो सकता है, इसलिए यदि यह एक समस्या है, तो आप एक अलगाव स्तर रखना चाहेंगे जो इसे रोकता है। Oracle में, लेन-देन A, अद्यतन के लिए चयन भी जारी कर सकता है, फिर लेन-देन B, A के पूरा होने तक पंक्ति को नहीं बदल सकता।