Khóa cho phép đọc dữ liệu trong MySQL thường được gọi là khóa đọc (READ LOCK). Đây là một loại khóa cho phép nhiều giao dịch (transactions) cùng lúc thực hiện thao tác đọc trên cùng một tài nguyên (bảng hoặc dòng) mà không bị cản trở, trong khi ngăn chặn các giao dịch khác thực hiện thao tác ghi (INSERT, UPDATE, DELETE) trên tài nguyên đó cho đến khi khóa được giải phóng.
Khi một giao dịch đặt khóa đọc trên một bảng, các giao dịch khác vẫn có thể thực hiện các truy vấn đọc (SELECT) từ bảng đó. Tuy nhiên, bất kỳ giao dịch nào cố gắng ghi dữ liệu vào bảng sẽ phải chờ cho đến khi khóa đọc được giải phóng.
Giả sử bạn có một bảng tên là users
và bạn thực hiện thao tác khóa đọc như sau:
LOCK TABLES users READ;
Khi khóa đọc được áp dụng:
SELECT * FROM users;
INSERT INTO users (name) VALUES ('Alice');
UPDATE users SET name = 'Bob' WHERE id = 1;
DELETE FROM users WHERE id = 2;
Các giao dịch ghi này sẽ phải chờ cho đến khi bạn giải phóng khóa đọc bằng lệnh sau:
UNLOCK TABLES;
Khi làm việc với InnoDB, bạn cũng có thể sử dụng các phương thức khóa tự động mà không cần sử dụng LOCK TABLES
. Điều này có nghĩa là khi bạn sử dụng giao dịch, MySQL sẽ tự động áp dụng khóa đọc hoặc viết phù hợp với các thao tác mà bạn thực hiện.
START TRANSACTION; SELECT * FROM users WHERE id = 1; -- Khóa đọc tự động được áp dụng -- Các thao tác khác ở đây COMMIT; -- Khóa đọc sẽ được giải phóng khi giao dịch được hoàn thành
Khóa cho phép đọc trong MySQL (khóa đọc) là một công cụ quan trọng trong việc quản lý đồng thời và bảo đảm tính toàn vẹn của dữ liệu. Nó cho phép nhiều giao dịch cùng lúc thực hiện thao tác đọc mà không bị cản trở, trong khi vẫn ngăn chặn các giao dịch ghi trên cùng một tài nguyên, từ đó giúp tăng cường hiệu suất và tính ổn định của hệ thống cơ sở dữ liệu.