Từ http://www.sqlite.org/lang_conflict.htmlsqlite ON khác biệt mâu thuẫn giữa Abort và FAIL
Abort Khi một hạn chế vi phạm áp dụng xảy ra, thuật toán giải quyết hủy bỏ hủy bỏ các câu lệnh SQL hiện với một lỗi SQLITE_CONSTRAIT và sao lưu ra bất kỳ thay đổi được thực hiện bởi hiện tại Câu lệnh sql; nhưng các thay đổi do các câu lệnh SQL trước trong cùng một giao dịch được giữ nguyên và giao dịch vẫn hoạt động. Đây là hành vi mặc định và hành vi đã đăng ký tiêu chuẩn SQL.
FAIL Khi xảy ra vi phạm ràng buộc áp dụng, thuật toán phân giải FAIL sẽ hủy bỏ câu lệnh SQL hiện tại bằng lỗi SQLITE_CONSTRAINT. Nhưng độ phân giải FAIL không trả lại các thay đổi trước của câu lệnh SQL thất bại cũng như không kết thúc giao dịch. Ví dụ, nếu một câu lệnh UPDATE gặp phải một sự vi phạm ràng buộc trên hàng thứ 100 mà nó cố gắng cập nhật, thì 99 thay đổi hàng đầu tiên được giữ nguyên nhưng những thay đổi đối với các hàng 100 và hơn thế nữa không bao giờ xảy ra.
Cả hai thay đổi bảo toàn được thực hiện trước tuyên bố gây ra vi phạm ràng buộc và không kết thúc giao dịch. Vì vậy, tôi cho rằng sự khác biệt duy nhất là độ phân giải FAIL không cho phép thay đổi thêm, trong khi ABORT chỉ sao lưu chỉ xung đột. Tôi có đúng không?
Cách diễn giải của bạn không khớp với tài liệu được dán ở đây. ABORT: cuộn lại toàn bộ câu lệnh sql nhưng không ảnh hưởng đến các sql khác trong cùng một txn. FAIL: chỉ ngăn chặn hàng lỗi cụ thể (và các hàng tiếp theo trong cùng câu lệnh SQL) - nhưng cho phép các hàng khác được thay đổi. FAIL và ABORT đều cho phép các câu lệnh khác trong cùng một txn để tiến hành. – javadba