Задать вопрос
@Pu4u
Начинающий php-программист

Многопоточный доступ к таблице mysql?

Несколько одинаковых скриптов работают с одной таблицей.
Строки упорядочены по дате запуска.
Каждый скрипт них выбирает первую строку, изменяет у нее дату запуска.

Как ПРАВИЛЬНО сделать, чтобы несколько скриптов не пытались работать с одной и той же строчкой? Нагуглить почему-то не удалось...
Просьба дать решение, а потом уже отправлять читать мануалы, исправить нужно сегодня.
  • Вопрос задан
  • 277 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
elevenelven
@elevenelven
Php Dev @ Amadeus
Добро пожаловать в мир блокировок и изоляций транзакций

- Выберите из таблицу строку у которой маркер 'in_work' == 0;
- Получите эксклюзивную блокировку на запись для этой строки. Но не на чтение.
- Выставте в строке маркер 'in_work' = 1;
- Выполните работу;
- Выставте в строке маркер 'in_work' = 0;
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
UPDATE `table` 
    SET `time` = `time` + INTERVAL 1 DAY
    WHERE @id := `id` AND `time` <= NOW() 
    ORDER BY `time` 
    LIMIT 1;

SELECT * 
    FROM `table` 
    WHERE `id` = @id;
Ответ написан
@shagguboy
1) сделать поле "блокированно" обновлять вначале его, а потом всё остальное.
2) запускать уровне serializable
Ответ написан
Комментировать
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
ну так Вы правильно мыслите - введите блокировки.
LOCK TABLE
IMHO LOCK TABLE READ должно хватить.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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