Khóa ghi (WRITE LOCK) trong MySQL là một cơ chế quản lý đồng thời cho phép một giao dịch thực hiện thao tác ghi trên một tài nguyên (bảng hoặc dòng) và ngăn chặn tất cả các giao dịch khác thực hiện thao tác ghi hoặc đọc trên tài nguyên đó cho đến khi khóa được giải phóng. Đây là một phần quan trọng trong việc đảm bảo tính toàn vẹn và nhất quán của dữ liệu trong cơ sở dữ liệu.
Khi một giao dịch đặt khóa ghi trên một bảng, nó sẽ:
Giả sử bạn có một bảng tên là products
và bạn thực hiện thao tác khóa ghi như sau:
LOCK TABLES products WRITE;
Khi khóa ghi được áp dụng:
INSERT INTO products (name, price) VALUES ('Product A', 100);
UPDATE products SET price = 150 WHERE id = 1;
DELETE FROM products WHERE id = 2;
SELECT * FROM products;
, nó sẽ phải chờ cho đến khi khóa ghi được giải phóng.Để giải phóng khóa ghi, bạn có thể sử dụng lệnh sau:
UNLOCK TABLES;
Trong các hệ quản trị cơ sở dữ liệu như InnoDB, bạn có thể không cần phải sử dụng LOCK TABLES
mà vẫn có thể áp dụng khóa ghi thông qua các thao tác giao dịch:
START TRANSACTION; UPDATE products SET price = 120 WHERE id = 1; -- Khóa ghi tự động được áp dụng -- Các thao tác khác ở đây COMMIT; -- Khóa ghi sẽ được giải phóng khi giao dịch được hoàn thành
Trong một số trường hợp, nếu nhiều giao dịch cố gắng khóa cùng một tài nguyên theo thứ tự khác nhau, điều này có thể dẫn đến deadlock. MySQL sẽ tự động phát hiện và giải quyết deadlock bằng cách hủy bỏ một trong các giao dịch để giải phóng khóa.
Khóa ghi (WRITE LOCK) là một phần quan trọng trong việc quản lý đồng thời trong MySQL, cho phép bảo vệ tính toàn vẹn của dữ liệu khi nhiều giao dịch thực hiện thao tác ghi. Bằng cách ngăn chặn các giao dịch khác thực hiện thao tác ghi hoặc đọc, khóa ghi đảm bảo rằng dữ liệu luôn nhất quán và chính xác trong suốt quá trình xử lý.