我正在閱讀有關innodb交易的手冊,但仍然有很多不清楚的東西給我。舉例來說,我不太明白以下行爲:inno db隔離級別和鎖定
-- 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
,行爲也是一樣的。任何人都可以描述這個例子背後的鎖定背景(在哪裏和爲什麼鎖)?
閱讀關於**'REPEATABLE READ' **:[Transaction levels](http://dev.mysql.com/doc/refman/5.5/en/set-transaction.html):'For locking reads( SELECT FOR FOR UPDATE或LOCK IN SHARE MODE),UPDATE和DELETE語句,鎖定**取決於語句是使用具有唯一搜索條件**的唯一索引,還是範圍類型搜索條件。 ...' – 2012-02-19 22:49:51