- Nếu một giao dịch giành được một khóa dòng mà giao dịch cũng yêu cầu khóa bảng cho bảng tương ứng(khóa bảng chi tiết) , khóa bảng ngăn ngừa đụng độ
Các khóa bảng (TM)
Cơ bản dùng điều khiển tương tranh với các thao tác DDL như ngăn ngừa bảng bị hủy trong thao tác DML. Khi một câu lệnh DML hay DDL trên 1 bảng, 1 khóa bảng được yêu cầu. Các khóa bảng không ảnh hường đến tương tranh của thao tác DML . Với các bảng phân chia (chia xẻ?), các khóa bảng có thể được yêu cầu cả ở bảng và các mức bảng con.
Khóa bảng khi 1 bảng bị thay đổi trong các câu lệnh DML sau: INSERT / UPDATE / DELETE / SELECT (mệnh đề FOR UPDATE )/ LOCK TABLE.
Khóa bảng bất kỳ ngăn ngừa việc chiếm một khóa DDL dành riêng trên cùng bảng và vì thế ngăn ngừa các thao tác DDL yêu cầu các khóa như vậy.
Một bảng có thể được giữ một trong các chế độ: row share (RS), row exclusive (RX), share (S), share row exclusive (SRX), and exclusive (X). Tính nghiêm ngặt của các chế độ khóa bảng xác định chế độ trong đó các khóa bảng khác trên cùng bảng có thể được giữ hay giành được.
Các khóa bảng chia xẻ dòng (RS)
Đôi khi còn gọi là khóa bảng chia xẻ dưới subshare table lock( SS) chỉ thị rằng giao dịch giữ khóa trên bảng khóa các dòng và có ý định cập nhật chúng. RS chiếm được tự động cho bảng khi chạy 1 trong các lệnh sau: SELECT ... FROM table ... FOR UPDATE OF ... ; LOCK TABLE table IN
ROW SHARE MODE; Khóa bảng chia xẻ dòng là chế độ it nghiêm ngặt nhất, đưa ra mức độ tương tranh lớn nhất của bảng.
Các thao tác được phép:Khóa bảng chia xẻ dòng được giữ bởi một giao dịch cho phép giao dịch khác truy vấn, insert, delete, hay khóa các dòng
tương tranh trong cùng bảng. Vì vậy, các giao dịch có thể dành được dòng chia xẻ đồng thời, dòng dành riêng, chia xẻ, và các khóa bảng dành riêng chia xẻ cho cùng bảng.
Các thao tác cấm:Khóa bảng chia xẻ giữ bởi một giao dịch ngăn ngừa các giao dịch khác truy nhập viết riêng với cùng bảng chỉ dùng lệnh sau: LOCK TABLE table IN EXCLUSIVE MODE;
Các khóa bảng dành riêng dòng (RX)
Còn gọi là khóa bảng dành riêng mức dưới subexclusive table lock( SX) chỉ thị rằng giao dịch giữ khóa tạo 1 hay nhiều bản cập nhật đến các dòng trong bảng. 1 khóa RX bị chiếm tự động để bảng thay đổi bởi các kiểu lệnh sau: INSERT INTO table ... ; UPDATE table ... ; DELETE FROM table ... ;
LOCK TABLE table IN ROW EXCLUSIVE MODE; Nghiêm ngặt hơn so với khóa bảng chia xẻ.
Các thao tác cho phép:Cho phép các giao dịch khác truy vấn, insert,
update,delete hay khóa các hàng tương tranh trong cùng bảng. Vì thế, khóa RX cho phép nhiều giao dịch giành hàng dành riêng và các khóa RS cho cùng một bảng.
Các thao tác cấm:Ngăn ngừa các giao dịch khác khóa tránh thao tác thủ công bảng cho việc đọc và viết dành riêng Vì thế các giao dịch khác không thể khóa tương tranh bảng dùng các lệnh sau:.
LOCK TABLE table IN SHARE MODE; LOCK TABLE table IN SHARE EXCLUSIVE MODE; LOCK TABLE table IN EXCLUSIVE MODE;
Các khóa bảng chia xẻ (S)
Được đòi hỏi tự động cho bảng đặc tả câu lệnh sau:
LOCK TABLE table IN SHARE MODE; Các thao tác cho phép:Khóa bảng chia xẻ được giữ bởi 1 giao dịch cho phép các giao dịch khác truy vấn
bảng, khóa các hàng chỉ ra với SELECT...FOR., hay chạy lệnh LOCK TABLE....IN SHARE thành công. Không có cập nhật nào là được phép bởi các giao dịch khác. Nhiều giao dịch có thể khóa bảng chia xẻ với cùng bảng tương tranh. Trong trường hợp này, không có giao dịch cập nhật bảng(thạm chí nếu 1 giao dịch giữ các khóa dòng như kết quả của lệnh SELECT với mệnh đề FOR UPDATE) . Vì thế, 1 giao dịch có khóa chia xẻ chỉ có thể cập nhật bảng nếu không có các giao dịch khác cũng có khóa chia xẻ trên cùng một bảng.
Các thao tác cấm: Khóa bảng chia xẻ giữ bởi giao dịch ngăn ngừa các giao dịch khác thay đổi cùng bảng và chạy các lệnh sau:
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE; LOCK TABLE table IN EXCLUSIVE MODE; LOCK TABLE table IN ROW