Các câu lệnh SQL là nguyên tử. Đó là, nếu bạn thực thi một cái gì đó như thế này:
UPDATE Cars SET Sold = Sold + 1
Không ai có thể thay đổi Sold
biến trong câu lệnh này. Nó luôn được tăng thêm 1, ngay cả khi ai đó khác đang thực hiện đồng thời cùng một câu lệnh.
Sự cố xảy ra nếu bạn có các câu lệnh phụ thuộc vào nhau:
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
Giữa các truy vấn này, người dùng khác có thể thay đổi bảng Ô tô và cập nhật Đã bán. Để tránh điều này, hãy gói nó trong một giao dịch:
BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;
Giao dịch được hỗ trợ bởi InnoDB, nhưng không được hỗ trợ bởi MyISAM.