Bản thân một truy vấn CHỌN bên trong một giao dịch, không được bảo vệ chính xác khỏi các CẬP NHẬT và XÓA.
Những gì bạn cần sử dụng như sau:
Nếu bạn phát hành Delete From orders Where id=1
, điều đó sẽ xảy ra khi các hàng trong orders
bảng đã giải phóng khóa của họ vào cuối giao dịch. Bạn có thể thử nghiệm (trên Máy chủ Dev / Staging) bằng cách sử dụng READ UNCOMMITTED
mức cô lập giao dịch để thực hiện xóa một cách hợp lý, nhưng chỉ khi cam kết thì nó mới hiển thị và được ghi lại vĩnh viễn.
Trong giao dịch thứ hai, về cơ bản tất cả các cược đã tắt. Nếu bạn chạy
select * From orders Where id=1;
UPDATE orders SET username="John" Where id=1;
chạy Delete From orders Where id=1
sẽ cam kết ngay lập tức. Tùy thuộc vào thứ tự MySQL thực thi các câu lệnh này, bạn sẽ thấy (hoặc không thấy) các hàng xóa.
CAUPAT
MySQL 5.6 hiện có các mục sau :
START TRANSACTION READ WRITE;
START TRANSACTION READ ONLY;
Công cụ sửa đổi READ WRITE và READ CHỈ đặt chế độ truy cập giao dịch. Họ cho phép hoặc cấm thay đổi các bảng được sử dụng trong giao dịch. Hạn chế READ CHỈ ngăn giao dịch sửa đổi hoặc khóa cả hai bảng giao dịch và không giao dịch có thể nhìn thấy đối với các giao dịch khác; giao dịch vẫn có thể sửa đổi hoặc khóa các bảng tạm thời. Các sửa đổi này có sẵn kể từ MySQL 5.6.5.