Мне нужно обновить строку в базе данных Oracle таким образом, чтобы я не скрывал изменения, сделанные другим клиентом, в моем веб-приложении.
В моей текущей системе я выполняю следующее:
SELECT * FROM table WHERE id=:ID AND lastmodified=:LASTMOD
если строка все еще существует с той же датой последнего изменения, когда мы начали, мы знаем, что никто не изменил ее, поэтому мы можем обновить, используя время последнего изменения.
Однако, делая это вручную, используя два сеанса, я заметил, что если два клиента выбирают примерно в одно и то же время, один из них может пропустить, что строка была изменена между этапами выбора и обновления из-за того, что оба произошли в течение одной секунды или миллисекунды .
Конечным результатом является то, что я блокирую изменения другого пользователя, и нет никаких предупреждений о том, что это произошло.
Я думал об использовании SELECT FROM UPDATE, но, видимо, это плохая идея (особенно для веб-приложений), статья рекомендует перечитать (что я и делаю выше), но я все еще думаю У меня есть риск забега.
Редактировать: Ясно дал понять, что меня беспокоит способ указания времени.