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

MySQL pilih untuk pembaruan mengembalikan set kosong meskipun ada baris

Dari ketergantungan pada pengaturan nilai kolom yang diindeks lebih tinggi atau lebih rendah, sepertinya kunci benar-benar ditempatkan pada entri indeks. Mesin basis data memindai indeks, dan berhenti pada entri terkunci pertama, menunggu untuk dirilis.

Ketika transaksi pertama dilakukan, indeks dibuka, dan transaksi menunggu melanjutkan pemindaian indeks. Karena nilainya diturunkan, sekarang lebih awal di indeks. Jadi pemindaian yang dilanjutkan tidak melihatnya karena telah melewati titik tersebut.

Untuk mengkonfirmasi ini, coba tes berikut:

  1. Buat dua baris, dengan nilai 2 dan 3.
  2. Pada kedua transaksi, lakukan SELECT ... FOR UPDATE
  3. Pada transaksi 1, ubah 2 menjadi 1, 3 menjadi 4.
  4. Melakukan transaksi 1.

Jika tebakan saya benar, transaksi 2 seharusnya hanya mengembalikan baris dengan 4.

Ini tampak seperti bug bagi saya, karena saya tidak berpikir Anda seharusnya mendapatkan hasil parsial seperti ini. Sayangnya, sulit untuk mencari ini di bugs.mysql.com, karena kata "untuk" diabaikan saat mencari karena terlalu pendek atau umum. Bahkan mengutip "untuk pembaruan" tampaknya tidak menemukan bug yang hanya berisi frasa ini.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengubah string menjadi desimal?

  2. 500 - Terjadi kesalahan – Fungsi DB melaporkan tidak ada kesalahan saat menambahkan artikel baru di Joomla

  3. Bagaimana cara membuat database mySQL di lokal saya dapat diakses dari mesin yang berbeda?

  4. Batasan dalam tabel MYSQL?

  5. Tampilkan tanggal pembuatan baris di mysql