MySQL की लॉकिंग सुविधा के साथ मेरे पास एक अजीब समस्या है (कम से कम मेरे लिए :))। इस डेटा के साथअद्यतन के लिए MySQL चयन - अजीब समस्या
create table `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1
:
मैं एक मेज है
+ ---- +
| आईडी |
+ ---- +
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 10 |
| 11 |
| 12 |
+ ---- +
अब मैं इन आदेशों शुरुआत में मार डाला के साथ 2 ग्राहक हैं:
सेट autocommit = 0;
सेट सत्र लेनदेन अलगाव स्तर serializable;
शुरू;
अब सबसे दिलचस्प हिस्सा है। पहला क्लाइंट इस क्वेरी को निष्पादित करता है: (आईडी के बराबर आईडी के साथ एक पंक्ति डालने का इरादा 9)
परीक्षण से चुनें जहां आईडी = 9 अद्यतन के लिए;
खाली सेट (0.00 सेकंड)
तो दूसरा ग्राहक एक ही करता है: परीक्षण से
चुनें * जहां आईडी = 9 अद्यतन के लिए;
खाली सेट (0.00 सेकंड)
मेरा प्रश्न है: क्यों दूसरा ग्राहक ब्लॉक नहीं करता? एक विशेष अंतर लॉक पहली क्वेरी द्वारा सेट किया जाना चाहिए क्योंकि अद्यतन के लिए उपयोग किया गया है और दूसरे क्लाइंट को ब्लॉक करना चाहिए।
यदि मैं गलत हूं, तो क्या कोई मुझे बता सकता है कि इसे सही तरीके से कैसे किया जाए?
MySQL संस्करण मैं का उपयोग करें: 5.1.37-1ubuntu5.1
यह ब्लॉक नहीं करता है क्योंकि आपने सफलतापूर्वक ** शून्य ** पंक्तियों को लॉक कर दिया है। – Pacerier