Потом делаю UPDATE этой записи с инкрементом какого-то поля.
Параллельно этот код работает для другого запроса. Оба делают +1 к одному начальному значению, и получается в сумме +1, а не +2.
Разве это не так работает?
Не так
Какая у тебя СУБД?
Одна транзакция пройдёт, другая зафейлится. Читать про изоляцию транзакций.
погугли transaction isolation level
Тут стоит прочитать про уровни изоляции транзакций.
Даже если без транзакций два потока сделают update set val=val+1, инкремент не протеряется.
Если тебе нужен механизм конкурентного обновления данных, то смотри в сторону двух/трех-фазных комитов. Блокировки записей в бд подойдут лишь в самых простых случаях
Обсуждают сегодня