Почему InnoDB блокирует пробел перед псевдозаписью супремума, когда ошибка дублированного ключа игнорируется во время вставки? - PullRequest
1 голос
/ 14 марта 2020

Предположим, что структура таблицы:

CREATE TABLE `single_uk` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `uk` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_biz` (`uk`)
) ENGINE=InnoDB AUTO_INCREMENT=111554 DEFAULT CHARSET=utf8

Текущие данные:

111502  | 2020-03-12 08:35:09 | 2020-03-12 08:35:09 | 100

Уровень изоляции: RR.

После выполнения оператора: insert ignore into single_uk (uk) value (100)

Начиная с performance_schema.data_locks, мы видим, что у нас есть следующие блокировки:

current locks

Блокировка таблицы IX и S следующая- ожидается блокировка клавиш на дублированном ряду. Что я не могу понять, так это почему InnoDB добавит блокировку X gap до supremum pseudo-record

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...