मैं innodb लेनदेन के बारे में एक मैनुअल पढ़ रहा हूँ लेकिन फिर भी, मेरे लिए बहुत अस्पष्ट चीजें हैं। उदाहरण के लिए, मैं काफी निम्न व्यवहार करने के लिए समझ में नहीं आता: अबinno डीबी अलगाव स्तर और लॉकिंग
-- client 1 -- client 2
mysql> create table simple (col int)
engine=innodb;
mysql> insert into simple values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into simple values(2);
Query OK, 1 row affected (0.00 sec)
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
mysql> begin;
Query OK, 0 rows affected (0.01 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> update simple set col=10 where col=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update simple set col=42 where col=2;
-- blocks
, अंतिम अद्यतन आदेश (ग्राहक 2 में) इंतजार कर रहा है। मैं आदेश को निष्पादित करने की अपेक्षा करता हूं क्योंकि मुझे लगता है कि केवल पंक्ति 1 लॉक है। व्यवहार वही है भले ही क्लाइंट 2 में दूसरा आदेश insert
है। क्या कोई इस उदाहरण के पीछे लॉकिंग पृष्ठभूमि का वर्णन कर सकता है (कहां और क्यों ताले)?
** के बारे में पढ़ें ** 'दोहराया गया पढ़ें ** **: [लेनदेन स्तर] (http://dev.mysql.com/doc/refman/5.5/en/set-transaction.html):' पढ़ने को लॉक करने के लिए (साझा मोड में अद्यतन या लॉक के साथ चुनें), अद्यतन, और हटाएं कथन, लॉकिंग ** इस बात पर निर्भर करता है कि कथन एक अद्वितीय खोज स्थिति ** या एक श्रेणी-प्रकार की खोज स्थिति के साथ एक अद्वितीय अनुक्रमणिका का उपयोग करता है या नहीं। ... ' –