Vaše řešení s příznakem se zdá být proveditelné a myslím, že jediná věc, kterou je potřeba, je nechat vypršet platnost zámku. V zásadě bych zámek navrhl tak, že bych napsal časové razítko, kdy byl zámek pořízen, a udělal ho tak, aby se proces musel aktualizovat zámek se tak často (tj. každých 30 sekund), zatímco stále pracuje na záznamu. Pokud proces zemře nebo z jiného důvodu nedokončí práci, platnost zámku vyprší a ostatní procesy se mohou odemknout pokud uplyne více než dvojnásobek časového limitu.
Když proces dokončí práci na záznamu, vymaže příznak zámku a označí záznam jako zpracovaný (opět další příznak).
Pravděpodobně budete chtít mít dvě pole:jedno, které by ukládalo příznak zámku časového razítka a druhé, které by indikovalo, který proces vlastní zámek (v případě, že vás to zajímá). Předpokládám, že existuje nějaký druh klíče, který lze použít k uspořádání záznamů v tabulce tak, aby koncept "další akce" měl smysl.
Dotaz, jako je tento, můžete použít k získání dalšího záznamu ke zpracování:
-- find the next available process and "lock" it by updating it's flag
UPDATE actions_tabe
SET LockFlag = @timestamp,
Process = @processname
WHERE Id IN (SELECT Id
FROM actions_table
WHERE LockFlag IS null
AND IsComplete = '0'
AND ScheduledTime < now()
ORDER BY Scheduledtime ASC, Id ASC
LIMIT 1);
-- return the Id and Action of the record that was just marked above
SELECT Id, Action
FROM actions_table
WHERE Process = @processname
Ukázka houslí zde:http://sqlfiddle.com/#!11/9c120/26 /1