Задать вопрос
@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;
  • Вопрос задан
  • 2389 просмотров
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Java-разработчик
    8 месяцев
    Далее
  • Shultais Education
    Основы SQL
    3 месяца
    Далее
  • OTUS
    PHP Developer. Professional
    5 месяцев
    Далее
Решения вопроса 1
Melkij
@Melkij
DBA для вашего PostgreSQL?
Сделайте сначала select for update, а для update у вас уже будет список id, соответственно, update where `id` in
Из-за select for update никто посторонний строки не перехватит.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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