Kedengarannya seolah-olah Anda memerlukan beberapa bentuk penanda untuk mengidentifikasi baris sebagai "sedang digunakan" sehingga instance lain tidak memproses data yang sama; apakah Anda menggunakan boolean atau tipe tanggal tidak relevan, entah bagaimana Anda harus menandai baris yang digunakan.
Anda dapat melakukan ini melalui operator, proses, atau utas dengan akses tunggal ke tabel Anda dan satu-satunya pekerjaan adalah memilih baris dan meneruskannya ke proses lain untuk dikerjakan. Bahkan petugas operator harus mengetahui sejauh mana data yang mereka peroleh sehingga Anda kembali ke masalah yang sama.
Cara lain adalah dengan menggunakan bidang untuk menunjukkan baris sedang digunakan (seperti yang Anda katakan dalam pertanyaan Anda). Setiap proses memperbarui blok baris dengan ID unik, dilakukan di dalam transaksi untuk mengunci tabel; Saya akan menggunakan nomor koneksi yang dikembalikan dari CONNECTION_ID()
untuk menandainya, maka Anda tahu itu unik.
Setelah UPDATE ... WHERE connection_id IS NULL
(dengan batasan yang diterapkan) transaksi selesai proses bisa SELECT ... WHERE connection_id = CONNECTION_ID()
untuk mendapatkan baris mereka untuk diproses.
Ketika mereka telah menyelesaikan pekerjaan mereka, seluruh siklus dimulai lagi untuk menandai rangkaian baris berikutnya sampai semua telah diproses.