1. Пессимистическая блокировка a) вычитка данных select * from SHOP_ORDER where ORDER_ID = 1; update SHOP_ORDER set LOCKED_BY = 'Me', LOCKED_DATE = SYSDATE where LOCKED_BY IS NULL; b) обновление данных update SHIP_ORDER set AMOUNT = AMOUNT + 10, LOCKED_BY = NULL, LOCKED_DATE = NULL where LOCKED_BY = 'Me' 2. Оптимистическая блокировка 2.1 без изменения схемы базы a) select ORDER_ID, AMOUNT from SHOP_ORDER where ORDER_ID = 1 b) update SHOP_ORDER set AMOUNT = AMOUNT + 10 where ORDER_ID = 1 and AMOUNT = :old_amount if (rowsAffected == 0) { бросить исключение: "заказ был изменен с момента выборки данных" } 2.2 с изменением схемы базы a) select ORDER_ID, AMOUNT, VERSION from SHOP_ORDER where ORDER_ID = 1 b) update SHOP_ORDER set AMOUNT = AMOUNT + 10, VERSION = VERSION + 1 where ORDER_ID = 1 and VERSION = :old_version if (rowsAffected == 0) { бросить исключение: "заказ был изменен с момента выборки данных" }