Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL InnoDB khóa chết khi CHỌN với khóa độc quyền (CHO CẬP NHẬT)

SELECT FOR UPDATE có được một ổ khóa dành riêng cho mục đích trên bàn trước khi có được ổ khóa độc quyền trên hồ sơ.

Do đó, trong trường hợp này:

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`

xảy ra bế tắc vì cả hai giao dịch đang giữ IX khóa trên bàn và đợi X khóa hồ sơ.

Trên thực tế, rất kịch bản này được mô tả trong MySQL hướng dẫn sử dụng khóa .

Để giải quyết vấn đề này, bạn cần loại bỏ tất cả các chỉ mục ngoại trừ chỉ mục bạn đang tìm kiếm, đó là lock_name .

Chỉ cần thả khóa chính vào 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. Làm cách nào để bạn kết nối hiệu quả với mysql trong php mà không cần kết nối lại trên mọi truy vấn

  2. Chỉ mục đầy đủ là gì và khi nào tôi nên sử dụng nó?

  3. VARCHAR so với TEXT trong MySQL

  4. Làm cách nào để trích xuất một giá trị số từ một chuỗi trong truy vấn MySQL?

  5. Ẩn kết quả trùng lặp trong truy vấn MySQL