Я периодически получаю тупик в своем приложении. В моем приложении есть 1 таблица, например EMPLOYEE (ID (PK), NAME, SAL), и есть 2 сеанса.
Сессия 1:
SELECT ID, NAME, SAL FROM EMPLOYEE WHERE SAL = (SELECT MIN(SAL) FROM
EMPLOYEE) FOR UPDATE
Let say the query return EMPLOYEE ROW having ID=2
then application does some processing like rs.updateInt(ID_SAL, 10);
Сессия 2: (для другой бизнес-логики)
SELECT ID, NAME, SAL FROM EMPLOYEE WHERE ID=2 FOR UPDATE.
Итак, в приложении оба сеанса пытаются обновить одну и ту же строку (в примере строка с ID = 2). Такая ситуация ожидается, и поэтому я подумал, что SELECT .. FOR UPDATE поможет.
Я делаю что-то неправильно? Я предполагаю, что SELECT FOR UPDATE заблокирует строку, и когда другой сеанс попытается обновить ту же строку, он будет ждать, пока сеанс 1 не завершит выполнение.