Khóa chia sẻ (Shared Lock) và khóa độc quyền (Exclusive Lock) là hai loại khóa chính trong hệ quản trị cơ sở dữ liệu, giúp đảm bảo tính nhất quán và toàn vẹn dữ liệu khi có nhiều giao dịch đồng thời thao tác trên cùng một dữ liệu. Dưới đây là sự khác biệt giữa hai loại khóa này:

1. Khóa chia sẻ (Shared Lock – S Lock):

  • Mục đích: Cho phép nhiều giao dịch đồng thời đọc cùng một tài nguyên (bảng, hàng) mà không gây xung đột với nhau.
  • Cách hoạt động:
    • Nếu một giao dịch đã đặt khóa chia sẻ trên một tài nguyên (ví dụ: một hàng trong bảng), các giao dịch khác cũng có thể đặt khóa chia sẻ trên tài nguyên đó, nhưng không được thực hiện thay đổi (ghi) vào tài nguyên đó cho đến khi tất cả các khóa chia sẻ được giải phóng.
    • Khóa chia sẻ chủ yếu được sử dụng cho các thao tác SELECT (chỉ đọc) và đảm bảo rằng dữ liệu không bị thay đổi trong khi đang được đọc bởi nhiều giao dịch.
  • Ví dụ: Giả sử hai giao dịch muốn đọc dữ liệu từ cùng một hàng trong cơ sở dữ liệu. Cả hai có thể thiết lập khóa chia sẻ trên hàng đó cùng một lúc mà không xung đột, vì cả hai chỉ đang đọc dữ liệu.
  • Hạn chế: Khi có khóa chia sẻ, không thể thực hiện thao tác ghi lên tài nguyên đó (các thao tác như INSERT, UPDATE, DELETE) cho đến khi khóa được giải phóng.

2. Khóa độc quyền (Exclusive Lock – X Lock):

  • Mục đích: Đảm bảo rằng một giao dịch duy nhất có thể đọc và ghi vào tài nguyên, ngăn chặn các giao dịch khác thực hiện bất kỳ thao tác nào (cả đọc và ghi) trên cùng tài nguyên trong khi khóa đang được giữ.
  • Cách hoạt động:
    • Khi một giao dịch đặt khóa độc quyền trên một tài nguyên, không giao dịch nào khác có thể đọc hoặc ghi vào tài nguyên đó cho đến khi khóa độc quyền được giải phóng.
    • Khóa độc quyền được sử dụng khi một giao dịch cần thực hiện các thao tác ghi (như UPDATE, DELETE, INSERT) và đảm bảo rằng dữ liệu không bị thay đổi hoặc đọc không đúng trong quá trình thao tác.
  • Ví dụ: Giả sử một giao dịch muốn cập nhật giá trị của một hàng. Nó sẽ thiết lập khóa độc quyền lên hàng đó. Trong suốt thời gian giao dịch này giữ khóa, không giao dịch nào khác có thể đọc hoặc thay đổi hàng đó.
  • Hạn chế: Khóa độc quyền ngăn cản các giao dịch khác truy cập tài nguyên, làm giảm khả năng song song và có thể ảnh hưởng đến hiệu suất trong trường hợp nhiều giao dịch muốn thao tác cùng một dữ liệu.

So sánh chi tiết:

Đặc điểm Khóa chia sẻ (Shared Lock) Khóa độc quyền (Exclusive Lock)
Mục đích Cho phép nhiều giao dịch đọc cùng tài nguyên Chỉ cho phép một giao dịch đọc và ghi vào tài nguyên
Số lượng giao dịch Nhiều giao dịch có thể giữ khóa chia sẻ đồng thời Chỉ một giao dịch duy nhất có thể giữ khóa độc quyền
Tác động Không cho phép ghi trong khi có khóa chia sẻ Không cho phép đọc và ghi bởi các giao dịch khác
Khi nào được sử dụng Các thao tác chỉ đọc (SELECT) Các thao tác ghi (UPDATE, DELETE, INSERT)
Xung đột Các giao dịch ghi sẽ bị chặn nếu có khóa chia sẻ Mọi giao dịch khác đều bị chặn (cả đọc lẫn ghi)

Kết luận:

  • Khóa chia sẻ (S Lock) được sử dụng khi nhiều giao dịch cần đọc cùng một tài nguyên mà không làm thay đổi dữ liệu.
  • Khóa độc quyền (X Lock) được sử dụng khi một giao dịch cần ghi (hoặc cập nhật) tài nguyên, ngăn cản các giao dịch khác đọc hoặc ghi vào tài nguyên đó để đảm bảo tính toàn vẹn dữ liệu.