в соответствии со ссылкой на MySQL https://dev.mysql.com/doc/refman/8.0/en/innodb-locks-set.html
- Для блокировок чтения (SELECT с операторами FOR UPDATE или FOR SHARE), UPDATE и DELETE, для неуникальных индексов, InnoDB блокирует сканированный диапазон индексовиспользование блокировок пробелов или блокировок следующего ключа для блокирования вставок другими сеансами в промежутки, охватываемые диапазоном.
- UPDATE ... WHERE ... устанавливает эксклюзивную блокировку следующего ключа для каждой записи, с которой сталкивается поиск.Однако для операторов, которые блокируют строки с использованием уникального индекса для поиска уникальной строки, требуется только блокировка записи индекса.
- DELETE FROM ... WHERE ... устанавливает эксклюзивную блокировку следующего ключа для каждой записипоиск встречает.Однако для операторов, которые блокируют строки с использованием уникального индекса для поиска уникальной строки, требуется только блокировка записи индекса. Мой вопрос: 1. когда будет использоваться только блокировка пробела, когда следующий ключзамок будет использоваться и почему?2. как происходит взаимодействие между уровнем сервера mysql и блокировкой innodb?
на той же странице: https://dev.mysql.com/doc/refman/8.0/en/innodb-locks-set.html
INSERT устанавливает эксклюзивную блокировку для вставленной строки.Эта блокировка является блокировкой записи индекса, а не блокировкой следующего ключа (то есть, нет блокировки пробела) и не препятствует вставке других сеансов в промежуток перед вставленной строкой.
INSERT ... ON DUPLICATE KEY UPDATE отличается от простой INSERT тем, что в строке, которая будет обновляться при возникновении ошибки дублирующегося ключа, помещается эксклюзивная блокировка, а не общая блокировка.Для дублирующегося значения первичного ключа принимается исключительная блокировка записи индекса.Исключительная блокировка следующего ключа используется для дублирования значения уникального ключа.
, почему блокировка следующего ключа используется для дублирования уникального ключа, когда используется INSERT ... ON DUPLICATE KEY UPDATEчем блокировка записи?