Разрывные замки могут сосуществовать, почему бы не в этом случае? - PullRequest
0 голосов
/ 08 ноября 2019

Как нам известно :

Могут сосуществовать зазоры. Блокировка промежутка, принятая одной транзакцией, не препятствует тому, чтобы другая транзакция взяла блокировку промежутка в том же самом промежутке. Нет разницы между общими и эксклюзивными блокировками. Они не конфликтуют друг с другом и выполняют одну и ту же функцию.

Рассмотрим таблицу:

mysql> create table t1 (id int primary key, val int) ENGINE=InnoDB;
mysql> insert into t1 values (1,2),(2,3),(3,4),(12,13),(18,19);

Сессия 1:

mysql> BEGIN;
mysql> SELECT * FROM t1 WHERE id BETWEEN 4 and 11 FOR UPDATE;  -- GAP lock

Сессия2:

mysql> BEGIN;
mysql> SELECT * FROM t1 WHERE id BETWEEN 4 and 11 FOR UPDATE;  -- Why block here ?
...