2011-11-07 42 views
20

Tôi đã thử nghiệm hỗ trợ giao dịch trong các bảng innoDB và chỉ dành cho sự tò mò mà tôi đã cố gắng chạy cùng một giao dịch trên bảng MyIsam và đáng ngạc nhiên là nó hoạt động. Tôi giả định rằng trên các truy vấn bảng myIsam được thực hiện cái khác không phải trong một hoạt động nguyên tử và tôi không nhận được bất kỳ lỗi nào từ các hoạt động START TRANSACTION và COMMIT và ROLLBACK. Tôi quan tâm, là động cơ MyIsam chỉ bỏ qua hoạt động này hay nó thực hiện một số hành động?Hỗ trợ giao dịch động cơ MyIsam

+0

"làm việc" có nghĩa là bạn đã có thể quay ngược lại một tuyên bố DML hoặc bạn đã không nhận được lỗi cú pháp? –

+0

Tôi đã thực hiện một câu lệnh chọn và chèn đơn giản và không nhận được bất kỳ lỗi nào. – Headshota

+2

Vâng, sau đó xem câu trả lời của @ Darhazer. Bạn có thể không nhận được lỗi nhưng bạn sẽ không thực sự có giao dịch. 'INSERT' của bạn sẽ không được hoàn tác khi bạn phát hành' ROLLBACK'. –

Trả lời

26

MyISAM hoạt động hiệu quả trong chế độ tự động cam kết (vì nó không phải là một công cụ giao dịch), và nó chỉ bỏ qua cam kết/rollback.

Trên thực tế công cụ lưu trữ là một lớp khác trong kiến ​​trúc MySQL, được tách biệt với trình phân tích cú pháp SQL, lớp SQL giao tiếp với công cụ lưu trữ với API cấp thấp hơn, và đó là lý do có SQL và động cơ thông thường tập hợp con nổi bật. Bạn có thể xem tổng quan cấp cao về kiến ​​trúc here

2

Tab MyIsam không được xây dựng cho điều này. Thậm chí không có trong 5 phiên bản. Nó chỉ có nghĩa là để lưu trữ dữ liệu. Nó cung cấp cho bạn không đảm bảo cho các giao dịch hoặc phục hồi dữ liệu. Bạn nên sử dụng InnoDB cho điều này và, nếu cần thiết, sử dụng MyIsam cho mục đích nhân rộng (nó nhanh hơn để lấy dữ liệu với các bảng MyIsam vì không có kiểm tra bảng chéo).

Bạn có thể đọc bài này từ MySQL http://forums.mysql.com/read.php?21,68686,69229#msg-69229

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