Несколько одинаковых скриптов работают с одной таблицей.
Строки упорядочены по дате запуска.
Каждый скрипт них выбирает первую строку, изменяет у нее дату запуска.
Как ПРАВИЛЬНО сделать, чтобы несколько скриптов не пытались работать с одной и той же строчкой? Нагуглить почему-то не удалось...
Просьба дать решение, а потом уже отправлять читать мануалы, исправить нужно сегодня.
- Выберите из таблицу строку у которой маркер 'in_work' == 0;
- Получите эксклюзивную блокировку на запись для этой строки. Но не на чтение.
- Выставте в строке маркер 'in_work' = 1;
- Выполните работу;
- Выставте в строке маркер 'in_work' = 0;
Для правильного вопроса надо знать половину ответа
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;