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