Как нам известно :
Могут сосуществовать зазоры. Блокировка промежутка, принятая одной транзакцией, не препятствует тому, чтобы другая транзакция взяла блокировку промежутка в том же самом промежутке. Нет разницы между общими и эксклюзивными блокировками. Они не конфликтуют друг с другом и выполняют одну и ту же функцию.
Рассмотрим таблицу:
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 ?