Задать вопрос
@MilkyWay

Как корректно организовать транзакции в MySQL с возвратом результата?

Здравствуйте. Подскажите, как корректно выбрать из БД записи в условиях конкурентного доступа, установить им флаг "в обработке" и вернуть результат, кому этот флаг установился. Сейчас делаю так, но не уверен, правильно ли полагаться на время модификации поля, ведь операция UPDATE может занять больше 1 секунды.
START TRANSACTION;
        UPDATE `list` a INNER JOIN
        (SELECT id FROM `list` WHERE `processing` = 0 LIMIT 10 FOR UPDATE) b
        ON a.id = b.id SET `processing` = -1;
        SELECT * FROM `list` WHERE `updated_at`=NOW() AND `processing`=-1;
        COMMIT;
  • Вопрос задан
  • 2388 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Сделайте сначала select for update, а для update у вас уже будет список id, соответственно, update where `id` in
Из-за select for update никто посторонний строки не перехватит.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы