Пример:
у меня есть таблица A (идентификатор, версия и поле) и таблица B (идентификатор, версия и поле).
Мне нужно совершить транзакцию, которая отредактирует запись A, а затем запись B.
- начать транзакцию
- обновить таблицуНастроить поле = 'aaa', версия = версия + 1, где id = 1 и версия = сохраненная версия
-если запись обновляется = 0, а затем выполняется откат
- обновить tableB set field = 'bbb', версия = версия + 1, где id = 1 и версия = сохраненная версия
-если запись обновляется = 0, а затем выполняется откат
- 1012 * совершить *
но если у меня есть другой поток, которому необходимо обновить таблицу в обратном порядке (в сложной среде существует вероятность того, что разработчик не будет следовать политикам), или потребуется обновить таблицу A (не ту же запись, что и первая транзакция), затем таблица B (та же запись, что и у первой транзакции), затем A (та же запись, что и у первой транзакции), может возникнуть тупик?
как правильно совершить транзакцию в оптимистической блокировке?
может ли решение использовать только хранимые процедуры?