Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

अद्यतन के लिए MySQL चयन खाली सेट देता है, भले ही एक पंक्ति मौजूद हो

अनुक्रमित कॉलम के मान को उच्च या निम्न पर सेट करने पर निर्भरता से, ऐसा लगता है कि लॉक वास्तव में इंडेक्स एंट्री पर रखा जा रहा है। डेटाबेस इंजन इंडेक्स को स्कैन करता है, और पहली लॉक की गई प्रविष्टि पर रुक जाता है, इसके जारी होने की प्रतीक्षा करता है।

जब पहला लेन-देन किया जाता है, तो सूचकांक अनलॉक हो जाता है, और प्रतीक्षा लेनदेन सूचकांक को स्कैन करना जारी रखता है। चूंकि मूल्य कम किया गया था, यह अब सूचकांक में पहले है। इसलिए फिर से शुरू किया गया स्कैन इसे नहीं देखता क्योंकि यह पहले ही उस बिंदु को पार कर चुका है।

इसकी पुष्टि करने के लिए, निम्न परीक्षण आज़माएं:

  1. मान 2 और 3 वाली दो पंक्तियाँ बनाएँ।
  2. दोनों लेन-देन में, SELECT ... FOR UPDATE करें
  3. लेन-देन 1 में, 2 से 1, 3 से 4 में बदलें।
  4. लेन-देन करें 1.

अगर मेरा अनुमान सही है, तो लेन-देन 2 को केवल 4 वाली पंक्ति लौटानी चाहिए।

यह मेरे लिए एक बग की तरह लगता है, क्योंकि मुझे नहीं लगता कि आपको कभी भी इस तरह के आंशिक परिणाम प्राप्त करने चाहिए। दुर्भाग्य से, इसे Bugs.mysql.com पर खोजना मुश्किल है, क्योंकि खोज करते समय "के लिए" शब्द को अनदेखा कर दिया जाता है क्योंकि यह बहुत छोटा या सामान्य है। यहां तक ​​​​कि "अपडेट के लिए" उद्धृत करने से भी ऐसे बग नहीं मिलते हैं जिनमें केवल यह वाक्यांश होता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL क्वेरी - पोस्ट से संबंधित नवीनतम टिप्पणी प्राप्त करें

  2. Laravel Delete Query Builder

  3. संग्रहीत प्रक्रिया के साथ डालें और अपडेट करें

  4. कमांड लाइन में ssh के माध्यम से दूरस्थ मशीन पर MySQL क्वेरी चलाएँ

  5. MySQL:DATE_ADD