2012-07-16 31 views
6

Câu lệnh "so sánh và trao đổi" này luôn luôn nguyên tử bất kể động cơ (ví dụ: InnoDB hoặc MyISAM)? :Cập nhật nguyên tử MySQL trong InnoDB vs MyISAM

UPDATE tbl_name SET locked=1 WHERE id=ID AND locked <> 1; 

Tôi hỏi điều này vì tôi dự định sử dụng câu lệnh này để thực hiện khóa cấp hàng giả tương thích với cả bảng cơ sở dữ liệu giao dịch và phi giao dịch.

Đây là phương pháp recommended for MyISAM, nhưng tôi không chắc chắn liệu điều này có hiệu quả đối với InnoDB hay không vì tài liệu đề xuất sử dụng giao dịch thay thế.

+0

Liên kết bị hỏng. Do đó, việc sử dụng câu lệnh cách ly này là không rõ ràng. –

Trả lời

4

Có. Trong InnoDB, hàng sẽ bị khóa (làm cho bạn có một chỉ mục duy nhất trên id, bản cập nhật sẽ khóa tất cả các hàng mà nó phải quét), cập nhật và khóa được giải phóng. Nếu bạn không ở trong giao dịch tự động/cam kết tự động được bật, mỗi câu lệnh được chạy trong giao dịch của chính nó, nhưng vẫn là giao dịch và khóa được thực hiện

Các vấn đề liên quan