Когда строка в MySQL/InnoDB заблокирован (неявно ли в связи с уровнем изоляции транзакции или явно с помощью SELECT * ... FOR UPDATE
или `` ... LOCK IN SHARE MODE`):Блокировка строки в MySQL/InnoDB всегда блокирует все связанные записи индекса?
ли эта блокировка также применяется к все записи индекса, связанные с строкой, или будет заблокирована только запись индекса, используемая для доступа к блокировке с помощью оператора блокировки?
В качестве примера, предположим, что существует таблица с колоннами x
, y
и z
, где x
и y
индексируются.
Будет ли заявление SELECT * FROM Table WHERE x = foo
, который возвращает одну запись с (x = foo, y = bar, z = c)
также сделать все заявления, как SELECT * FROM Table WHERE y = bar
ждать на замке, или может они все еще будут выполняться одновременно (при условии, что они не будут пытаться изменить саму запертую строку, конечно) ?
Обновление: Пожалуйста, обратите внимание, что речь идет не о индексной записи или щелевых замках в целом. Речь идет о конкретном случае блокировки, считываемом с помощью индекса сканирования x
, и будет ли ожидать, что запросы будут проверяться на y
.
Кроме того, протокол HTTPS.://www.percona.com/blog/2012/03/27/innodbs-gap-locks/ – Drew
@Drew Я знаю, как работает запись индекса и блокировка пробелов. Этот вопрос касается, в частности, индексов, которые _not_ сканируются с помощью запроса на блокировку. – lxgr
Например, в другой базе данных? – Drew