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

Kunci mati MySQL InnoDB pada SELECT dengan kunci eksklusif (UNTUK PEMBARUAN)

SELECT FOR UPDATE memperoleh kunci eksklusif maksud di atas meja sebelum mendapatkan kunci eksklusif pada catatan.

Oleh karena itu, dalam skenario ini:

X1: SELECT FOR UPDATE -- holds IX, holds X on 'lock_name'
X2: SELECT FOR UPDATE -- holds IX, waits for X on 'lock_name'
X1: INSERT -- holds IX, waits for X for the gap on `id`

kebuntuan terjadi, karena kedua transaksi memegang IX mengunci meja dan menunggu X mengunci catatan.

Sebenarnya, skenario ini dijelaskan dalam MySQL manual tentang penguncian .

Untuk mengatasinya, Anda harus menyingkirkan semua indeks kecuali yang Anda cari, yaitu lock_name .

Cukup letakkan kunci utama di id .



  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 datetime MySQL ke NSDate?

  2. Pencarian Teks Lengkap dengan InnoDB

  3. Proses pembunuhan MySQL adalah pengguna tidak mendapat cukup poin PHP

  4. Panjang maksimum nama tabel di MySQL

  5. Pilih beberapa jumlah dengan kueri MySQL dan tampilkan di kolom terpisah