Уровни изоляции и блокировки inno db

Я читаю руководство по транзакциям innodb, но, тем не менее, мне остается много неясного. Например, я не совсем понимаю следующее поведение:

-- 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 . Может ли кто-нибудь описать фон блокировки, стоящий за этим примером (где и почему блокировки)?

8
задан Somnath Muluk 15 September 2016 в 08:56
поделиться