вида
в первом запросе выбираются нужные айдишники
SELECT * from items where parent_id = :setparent_id LIMIT :setlimit
во втором происходит их апдейт по айдишникам если количество достаточное
UPDATE items SET status = :setstatus,hash = :sethash WHERE id IN (*,*,*,*,*) , этот запрос завернут в транзакцию , настройки mysql стандартные. И возникает проблема, при одновременном вызове этой транзакции хеш может проставиться не во всех позициях , кто может разжевать как так получается ?
Для Postres я в таких случаях использую skip for update. И тогда вторая транзакция не видит выбранные записи из первой. Можно ещё посмотреть уровни изоляции транзакций. Настроить более жёсткие. Или второй вариант - использовать implicit locking.
в mysql 8.0 есть select for update skip locked
большое спасибо за наводку буду читать
Обсуждают сегодня