Может ли оптимистическая блокировка привести к тупику? - PullRequest
0 голосов
/ 01 апреля 2019

Пример: у меня есть таблица A (идентификатор, версия и поле) и таблица B (идентификатор, версия и поле).

Мне нужно совершить транзакцию, которая отредактирует запись A, а затем запись B.

  • начать транзакцию
  • обновить таблицуНастроить поле = 'aaa', версия = версия + 1, где id = 1 и версия = сохраненная версия -если запись обновляется = 0, а затем выполняется откат
  • обновить tableB set field = 'bbb', версия = версия + 1, где id = 1 и версия = сохраненная версия -если запись обновляется = 0, а затем выполняется откат
  • 1012 * совершить *

но если у меня есть другой поток, которому необходимо обновить таблицу в обратном порядке (в сложной среде существует вероятность того, что разработчик не будет следовать политикам), или потребуется обновить таблицу A (не ту же запись, что и первая транзакция), затем таблица B (та же запись, что и у первой транзакции), затем A (та же запись, что и у первой транзакции), может возникнуть тупик?

как правильно совершить транзакцию в оптимистической блокировке? может ли решение использовать только хранимые процедуры?

...