Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

cara mengunci beberapa baris karena tidak dipilih di transaksi lain

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah Anda bergabung dalam subquery dengan Doctrine 2 DQL?

  2. Permintaan MySQL untuk Menghapus catatan setelah memilih ..?

  3. Bantuan Desain Kueri SQL Tingkat Lanjut (Duplikat di dua tabel, beberapa bidang, kemungkinan pengecualian berdasarkan satu bidang)

  4. mySQL dateTime range Masalah Kueri

  5. Apakah klausa MySQL IN mengeksekusi subquery beberapa kali?