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

MySQL Deadlock với một phần chèn làm tăng kích hoạt

Luồng 2 giữ một khóa chia sẻ trên hàng trong bảng người dùng.

Sau đó, chuỗi 1 cố gắng lấy một khóa độc quyền trên cùng một hàng và chuyển sang trạng thái chờ khóa.

Nhưng luồng 1 sẽ không có cơ hội để hết thời gian, bởi vì luồng 2 sau đó cố gắng nâng khóa của mình lên thành độc quyền ... nhưng để làm được điều đó, anh ta phải đợi luồng 1, đang ở chế độ chờ, nhưng nó đang chờ luồng 2.

Chúng đang chặn nhau.

Thật là bế tắc.

Máy chủ chọn một giao dịch để kết thúc, để chúng không chặn lẫn nhau một cách bất cần.

Phát hiện bế tắc cho phép một luồng ngay lập tức thành công với chi phí của luồng kia. Nếu không, cả hai sẽ bị kẹt trong ổ khóa, hãy đợi cho đến khi một trong hai người chết vì đợi quá lâu.

Bạn đang ở chế độ tự động gửi, nhưng tất nhiên, điều đó không có nghĩa là bạn không tham gia một giao dịch. Mọi truy vấn với InnoDB vẫn được xử lý trong một giao dịch, nhưng với autocommit, giao dịch được bắt đầu một cách ngầm định khi truy vấn bắt đầu thực thi và được cam kết ngầm khi nó thành công.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhóm một giá trị được phân tách bằng dấu phẩy trên dữ liệu chung

  2. Cách phân tích cú pháp JSON trong trình kích hoạt MYSQL

  3. MYSQL hiển thị 0 ngay cả khi kết quả không tồn tại

  4. Tổng phép nhân các cột cho các hàng có ID tương tự trong MySQL

  5. php mysql hôm nay, hôm qua và ngày từ cơ sở dữ liệu