Создать блокировку при вставке / обновлении строк, имеющих определенное значение - PullRequest
0 голосов
/ 03 июля 2018

В транзакции MySQL в InnoDB блокировка разрыва создается для запроса SELECT ... FOR UPDATE в режиме REPEATABLE READ.

Таким образом, если транзакция T1 выполняет запрос SELECT * FROM `inventory` WHERE `price`=45545 FOR UPDATE;, а затем T2 выполняет UPDATE `inventory` SET `color`=3 WHERE `price`=45545;, T2 останавливается, пока T1 не завершится из-за блокировки промежутка. Это поведение полезно, поскольку T1 поддерживает инвариант, что он имеет эксклюзивную блокировку для всех строк, имеющих `price`=45545.

Однако, похоже, это не тот случай, когда нет строк, начинающихся с `price`=45545. В этом случае блокировка пробела не создается, и T2 работает успешно, нарушая инвариант.

Есть ли способ заставить MySQL захватить пробел, даже если ни одна строка не совпадает?

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