Я использую 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
дважды из той же таблицы внутри одной и той же транзакции? Выпускается ли первый замок? Я видел доказательства того, что это так, но я не могу понять, как это подтвердить.
Вы установили autocommit в 0 или начали транзакцию перед выдачей SELECT? – outis 2010-12-15 15:58:13