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

MySQL InnoDB:Sự khác biệt giữa `FOR UPDATE` và` LOCK IN SHARE MODE`

Tôi đã cố gắng hiểu sự khác biệt giữa hai điều này. Tôi sẽ ghi lại những gì tôi đã tìm thấy với hy vọng nó sẽ hữu ích cho người tiếp theo.

Cả LOCK IN SHARE MODEFOR UPDATE đảm bảo không có giao dịch nào khác có thể cập nhật các hàng được chọn. Sự khác biệt giữa cả hai là cách chúng xử lý các khóa trong khi đọc dữ liệu.

LOCK IN SHARE MODE không ngăn một giao dịch khác đọc cùng một hàng đã bị khóa.

FOR UPDATE ngăn chặn các lần đọc khóa khác của cùng một hàng (các lần đọc không khóa vẫn có thể đọc hàng đó; LOCK IN SHARE MODEFOR UPDATE đang khóa các lần đọc).

Điều này quan trọng trong các trường hợp như cập nhật bộ đếm, nơi bạn đọc giá trị trong 1 câu lệnh và cập nhật giá trị trong một câu lệnh khác. Tại đây bằng cách sử dụng LOCK IN SHARE MODE sẽ cho phép 2 giao dịch đọc cùng một giá trị ban đầu. Vì vậy, nếu bộ đếm được tăng lên 1 bởi cả hai giao dịch, thì số cuối cùng có thể chỉ tăng 1 - vì ban đầu cả hai giao dịch đều đọc cùng một giá trị.

Sử dụng FOR UPDATE sẽ khóa giao dịch thứ hai không đọc giá trị cho đến khi giao dịch đầu tiên được thực hiện. Điều này sẽ đảm bảo bộ đếm tăng lên 2.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cố gắng để có được tài sản của chủ thể bên trong

  2. Dù sao để giới hạn thời gian thực thi truy vấn MySQL?

  3. Xoay tập hợp kết quả mysql và tạo bảng / ma trận html

  4. Khi nào tôi nên sử dụng giao thức nén MySQL?

  5. Laravel Database Schema, Nullable Foreign