Я использую SELECT...FOR UPDATE
запросов для блокировки таблицы.К сожалению, у меня есть ситуация, когда мне нужно заблокировать два разных набора строк в одной и той же таблице, например:
SELECT * FROM mytable WHERE attribute1 = 'something' FOR UPDATE
SELECT * FROM mytable WHERE attribute2 = 'somethingelse' FOR UPDATE
UPDATE mytable SET attribute2 = 'somethingnew' WHERE somethingelse
Мне нужно заблокировать оба набора строк.Что я делаю, так это проверяю, чтобы ни один из объектов в таблице не находился в определенном состоянии, а затем нахожу другие объекты, которые можно перевести в это состояние, и помещаю их туда.Цель состоит в том, чтобы удовлетворить определенные ограничения, которые слишком сложны, чтобы быть закодированными в mysql.
Итак ... вопрос в том, что происходит, когда я SELECT...FOR UPDATE
дважды из одной таблицы внутри одной транзакции?Первая блокировка освобождается?Я видел доказательства того, что это так, но я не могу понять, как это подтвердить.