Здравствуйте, Sinclair, Вы писали:
S>Если не находит, то делает
S>begin transaction;
update stock
...
update stock
...
S>insert into reservationItems(orderId, productId, quantity) values(42, 17, 10);
S>insert into reservationItems(orderId, productId, quantity) values(42, 5, 1);
...
S>commit transaction
Кстати, вовсе необязательно делать все строки заказа в одной БД-транзакции. Их можно делать поштучно или разбивать на батчи, шарды и т.п. с целью чтобы транзакции были меньшего размера. Это позволит сильнее параллелить и меньше крутиться на локах.