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

Khóa độc quyền MySQL

Có, bạn đang khóa tất cả các hàng trong bảng khi gặp điều kiện trên cột không được lập chỉ mục như user_id .

Các khóa áp dụng cho tất cả các hàng "được kiểm tra". Điều kiện của bạn WHERE user_id = <user_id> phải kiểm tra tất cả các hàng trong bảng và kiểm tra từng hàng một để xem chúng có khớp với giá trị của <user_id> .

Cả hai truy vấn đang kiểm tra toàn bộ tập hợp các hàng, ngay cả khi chúng đang tìm kiếm các giá trị cụ thể khác nhau của <user_id> , vì vậy chúng xung đột.

Nếu bạn có một chỉ mục trên user_id thì MySQL sẽ sử dụng chỉ mục đó để tìm các hàng phù hợp trước tiên, sau đó chỉ các hàng phù hợp mới trở thành các hàng được kiểm tra và do đó sẽ bị khóa.

Điều này không liên quan gì đến mức cô lập giao dịch. Các loại khóa này xảy ra ở tất cả các cấp độ cách ly giao dịch.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảng không xác định trong MULTI DELETE

  2. Symfony3 cách lưu trữ vai trò người dùng trong cơ sở dữ liệu

  3. In ra một truy vấn SQL đơn (Yii 1.x)

  4. Kiểm tra kết nối cơ sở dữ liệu Entity Framework

  5. JPA TemporalType.Date đưa ra ngày sai