2016-11-29 10 views
0

Когда строка в 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.

+0

Кроме того, протокол HTTPS.://www.percona.com/blog/2012/03/27/innodbs-gap-locks/ – Drew

+0

@Drew Я знаю, как работает запись индекса и блокировка пробелов. Этот вопрос касается, в частности, индексов, которые _not_ сканируются с помощью запроса на блокировку. – lxgr

+0

Например, в другой базе данных? – Drew

ответ

0

Т.Л., д-р: Нет

При использовании MySQL/InnoDB и вы SELECT *... FOR UPDATE, строки, заблокированные являются only the rows you selected.

В вашем случае - если у вас есть SELECT * FROM Table WHERE x = foo FOR UPDATE, только те строки, которая соответствует WHERE x = foo заблокированным (если у вас есть какие-то другие строки, которые y = bar AND x != foo эти строки не быть запертыми

+0

В мои наблюдения, даже пропущенные строки заблокированы в InnoDB, что также согласуется с документацией: http://dev.mysql.com/doc/refman/5.7/en/innodb-locks-set.html – lxgr

+0

См. обсуждения «разрыв замок». –