2013-02-08 39 views
9

Tôi có một sự tò mò nhỏ về khóa bảng MySQL.MySQL Nhiều ổ khóa bảng

Giả sử tôi muốn khóa hai bảng. Tôi thực hiện lệnh này:

LOCK TABLES table1 WRITE, table2 WRITE 

Và sau đó tôi đã kiểm tra nếu các bảng đã thực sự bị khóa bằng cách thực hiện:

SHOW OPEN TABLES IN mydatabase WHERE In_use > 0 

tôi đã nhận thấy tho rằng nếu tôi chạy hai khóa lệnh sequentitally ví dụ:

LOCK TABLES table1 WRITE 
LOCK TABLES table2 WRITE 

Và sau đó kiểm tra bảng nào bị khóa bằng cách sử dụng cùng một lệnh chỉ bảng 2 được đánh dấu là đã khóa. Tại sao cái này rất?

Cảm ơn

Trả lời

7

LOCK TABLES không phải là giao dịch an toàn và ngầm cam kết bất kỳ giao dịch tích cực trước khi cố gắng để khóa các bảng.

Vì vậy, trong trường hợp đầu tiên, bạn có một giao dịch mà giữ 2 bảng bị khóa, trong lần thứ hai chỉ có một, bởi vì LOCK TABLES table1 WRITE đã cam kết

0

bảng Khóa đầu tiên sẽ mở khóa tất cả các bảng bị khóa bởi phiên hiện tại trước khi thực hiện khóa được chỉ định. Vì vậy, các cuộc gọi để khóa bảng 2 là mở khóa bảng 1.

Các vấn đề liên quan