Zní to, jako byste potřebovali nějakou formu značky k identifikaci řádků jako „používaných“, takže ostatní instance nezpracovávají stejná data; nezáleží na tom, zda použijete typ boolean nebo datum, nějakým způsobem musíte označit používané řádky.
Můžete to udělat buď prostřednictvím dispečera, procesu nebo vlákna s jediným přístupem k vaší tabulce a kdo má jedinou práci, vybrat řádky a předat je dalším procesům, na kterých budou pracovat. I v takovém případě bude muset dispečer vědět, jak daleko má data k dispozici, abyste se vrátili ke stejnému problému.
Dalším způsobem je použít pole k označení řádku, který se používá (jak jste uvedli ve své otázce). Každý proces aktualizuje blok řádků s jedinečným ID, provedené uvnitř transakce k uzamčení tabulky; Použil bych číslo připojení vrácené z CONNECTION_ID()
abyste je označili, pak víte, že je jedinečný.
Po UPDATE ... WHERE connection_id IS NULL
(s aplikovaným limitem) transakce je dokončena proces může SELECT ... WHERE connection_id = CONNECTION_ID()
získat jejich řádky ke zpracování.
Když dokončí svou práci, celý cyklus začne znovu, aby se označila další sada řádků, dokud nebudou všechny zpracovány.