Có vẻ như bạn cần một số dạng điểm đánh dấu để xác định các hàng là "đang được sử dụng" để các trường hợp khác không xử lý cùng một dữ liệu; cho dù bạn sử dụng kiểu boolean hay kiểu ngày tháng không liên quan, bằng cách nào đó, bạn phải đánh dấu các hàng đang sử dụng.
Bạn có thể thực hiện việc này thông qua người điều phối, một quy trình hoặc chuỗi chỉ có quyền truy cập vào bảng của bạn và công việc duy nhất của ai là chọn các hàng và chuyển chúng cho các quy trình khác để làm việc. Ngay cả khi đó, người điều phối sẽ phải biết dữ liệu họ có được bao xa để bạn quay lại vấn đề tương tự.
Một cách khác là sử dụng một trường để cho biết hàng đang được sử dụng (như bạn đã nói trong câu hỏi của mình). Mỗi quy trình cập nhật một khối các hàng với một ID duy nhất, được thực hiện bên trong một giao dịch để khóa bảng; Tôi sẽ sử dụng số kết nối được trả về từ CONNECTION_ID()
để đánh dấu chúng, thì bạn sẽ biết nó là duy nhất.
Sau UPDATE ... WHERE connection_id IS NULL
(có áp dụng giới hạn) giao dịch hoàn tất quá trình có thể SELECT ... WHERE connection_id = CONNECTION_ID()
để lấy các hàng của chúng để xử lý.
Khi họ đã hoàn thành công việc của mình, toàn bộ chu kỳ bắt đầu lại để đánh dấu tập hợp các hàng tiếp theo cho đến khi tất cả đã được xử lý.