Звучи така, сякаш имате нужда от някаква форма на маркер, за да идентифицирате редовете като „използвани“, така че другите екземпляри да не обработват същите данни; дали използвате булев тип или тип дата, е без значение, по някакъв начин трябва да маркирате използваните редове.
Можете да направите това чрез диспечер, процес или нишка с единствен достъп до вашата таблица и чиято единствена работа е да избира редове и да ги предава на други процеси, върху които да работят. Дори тогава диспечерът ще трябва да знае колко далеч са получили данните, за да се върнете към същия проблем.
Друг начин е да използвате поле, за да посочите, че редът се използва (както казахте във вашия въпрос). Всеки процес актуализира блок от редове с уникален идентификатор, изпълняван в транзакция, за да заключи таблицата; Бих използвал номера на връзката, върнат от CONNECTION_ID()
за да ги маркирате, тогава знаете, че е уникален.
След UPDATE ... WHERE connection_id IS NULL
(с приложен лимит) транзакцията е завършена, процесът може да SELECT ... WHERE connection_id = CONNECTION_ID()
за да получат техните редове за обработка.
Когато завършат работата си, целият цикъл започва отново, за да маркира следващия набор от редове, докато всички бъдат обработени.