статусы: pending, in work, failed
Раз в минуту берется 200 записей со статусом pending и у них обновляется статус на in work
При этом, в любой момент может придти insert on duplicate key`и засобачить статус на `pending. У него есть if на статус.
Собсна, вопрос:
Я хочу залочить таблицу, выбрать 200 записей, обновить им статус и разблочить. В таком случае никто не заденет статус.
Как жить :(?
У тебя вопрос - это не вопрос
Оке, тогда уточню: как мне сделать лок в данном случае? Видел select for update, но не знаю как ему сказать обновить только те, которые взял из селекта
begin; select * from foo where status = 'pending' limit 2 for update; update foo set status = 'in work'; -- Как вот здесь обновить только те, что я взял выше? commit;
Select for update - это как бы update, но
Ты же выбрал определённые записи, вот их и UPDATe- и
Они будут уже заблокированы для выполнения update
Спасибо большое за разъянение. Затуп как раз в том, как их обновить :( Гуглил, но не нашел, честно :(
Ты выбрал данные этих записей? Знаешь их?
begin; select * from foo where status = 'pending' limit 2 for update; update foo set status = 'in work' where status = 'pending'; commit;
Что вы там курите, зачем вам select for update здесь непонятно
Обсуждают сегодня