Lệnh SET TRANSACTION ISOLATION LEVEL
trong MySQL (và các hệ quản trị cơ sở dữ liệu khác) được sử dụng để đặt mức độ cô lập giao dịch, kiểm soát cách các giao dịch có thể nhìn thấy thay đổi từ các giao dịch khác và tránh các vấn đề như đọc không lặp lại (non-repeatable read), dirty read, và phantom read.
Mức độ cô lập xác định mức độ mà một giao dịch bị ảnh hưởng bởi các giao dịch khác khi nhiều giao dịch đang thực thi đồng thời.
SET TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE};
READ UNCOMMITTED:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
READ COMMITTED (Mức mặc định trong nhiều hệ thống):
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
REPEATABLE READ (Mức mặc định trong MySQL):
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SERIALIZABLE:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Giả sử bạn đang làm việc với một hệ thống giao dịch ngân hàng và muốn tránh mọi khả năng lỗi xảy ra trong giao dịch, bạn có thể thiết lập mức cô lập cao nhất:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION; -- Các câu lệnh giao dịch COMMIT;
Trong trường hợp bạn chỉ muốn đảm bảo không đọc phải dữ liệu chưa được commit, bạn có thể đặt mức cô lập thấp hơn như READ COMMITTED
để cải thiện hiệu năng:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; START TRANSACTION; -- Các câu lệnh giao dịch COMMIT;
Lệnh SET TRANSACTION ISOLATION LEVEL
cho phép bạn điều chỉnh hành vi của giao dịch để đảm bảo tính toàn vẹn dữ liệu trong các trường hợp giao dịch đồng thời. Mỗi mức độ cô lập sẽ cân bằng giữa tính an toàn của dữ liệu và hiệu suất hệ thống.