मैं MySQL सर्वर 5.5 के साथ इस की कोशिश की:MySQL repeatable पढ़ने और खो अद्यतन/प्रेत पढ़ता
1) यह सुनिश्चित किया कि लेन-देन अलगाव स्तर repeatable_read है
2) खोल -1 शुरू कर दिया, उस में कोई लेन-देन शुरू कर दिया, तो,
3) शुरू कर दिया खोल -2 का चयन
के माध्यम से एक मूल्य को पढ़ने के उस में एक लेन-देन शुरू कर दिया है, तो +1 और प्रतिबद्ध मूल्य का चयन4) खोल -1 में के माध्यम से एक ही मूल्य, मूल्य अद्यतन पढ़
5) खोल -2 में, मूल्य अद्यतन मूल्य + 1 और प्रतिबद्ध
मूल्य इसकी अद्यतन में से एक खो दिया है और अब से 1.
केवल वृद्धि की गई थी, के रूप में मैं इसे, आर आर का उपयोग करता है को समझने साझा पढ़े गए ताले और अनन्य लेखन ताले, जिसका अर्थ है कि ऊपर # 4 और # 5 में, लेनदेन को मृत-बंद होना चाहिए था, लेकिन ऐसा नहीं हुआ।
तो या तो आरआर की मेरी समझ दोषपूर्ण है, या MySQL आरआर को एक अलग तरीके से लागू करता है। तो यह क्या है?
संपादित करें: इसी तरह के प्रयोग के माध्यम से, यह भी पुष्टि की गई कि एक आरआर लेनदेन (टी 1) एक ही तालिका में अन्य आरआर लेनदेन (टी 2) द्वारा पंक्तियों में डाली गई पंक्तियों को नहीं देखता है, अगर यह टी 2 के बाद भी उस तालिका पर दूसरा चयन करता है और टी 1 करने से पहले। (यहां इस प्रयोग का लिंक दिया गया है: http://www.databasejournal.com/features/mysql/article.php/3393161/MySQL-Transactions-Part-II---Transaction-Isolation-Levels.htm)
क्या इसका मतलब यह है कि MySQL का आरआर प्रेत का ख्याल रखता है?
आप serializable लेनदेन की कोशिश की? http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html#isolevel_serializable – biziclop
हां, और ऐसा लगता है कि MySQL serializable साझा पठन ताले और विशेष लेखन ताले का उपयोग करता है, और इसलिए इसमें एक डेडलॉक देता है उपरोक्त मामले में तो मैं वास्तव में उलझन में हूं, क्योंकि यहां 'जेब विद हाइबरनेट' पुस्तक कहती है: "दोहराने योग्य पढ़ने के अलगाव मोड में चल रही एक प्रणाली न तो अपरिवर्तनीय पढ़ती है और न ही गंदे पढ़ती है। प्रेत पढ़ता है। लेनदेन पढ़ना ब्लॉक लेखन लेनदेन (लेकिन नहीं अन्य पढ़ने के लेनदेन), और लेखन लेनदेन अन्य सभी लेनदेन को अवरुद्ध करते हैं। " (पेज 456) – shrini1000