Lỗi DB::transaction trong Laravel
Cho mình hỏi mình có DB::transaction
DB::transaction(function () {
DB::table('posts')->delete();
DB::table('category')->delete(); // bảng này không tồn tại
});
Kết quả khi chạy là bảng posts bị xóa hết dữ liệu và báo lỗi không tồn tại bảng category. Mình thắc mắc là tại sao khi đã dùng transaction rồi mà khi gặp lỗi nó không hề rollback về trang thái trước khi thực hiện .
Transaction trong SQL là một nhóm các câu lệnh SQL, xử lý có tuần tự các thao tác trên cơ sở dữ liệu . Nếu một transaction được thực hiện thành công, tất cả các thay đổi dữ liệu được thực hiện trong transaction được lưu vào cơ sở dữ liệu. Nếu một transaction bị lỗi và được rollback thì tất cả các sửa đổi dữ liệu sẽ bị xóa (dữ liệu được khôi phục về trạng thái trước khi thực hiện transaction).
Thanks
2 CÂU TRẢ LỜI
Bạn kiểm tra lại xem bảng posts
, category
của bạn đang để Storage Engine là kiểu gì nếu là kiểu MyISAM thì không hỗ trợ transaction. Bạn nên đổi sang kiểu InnoDB
Thanks. Do kiểu MyISAM. Mình đổi InnoDB thì nó chạy rồi. Cảm ơn bạn.
@LongThanh.it hhhhhhhhhhhhhhh
Bạn dùng theo cách thủ công or thêm tham số thứ 2 vào sau thử:
DB::beginTransaction();
try {
DB::table('posts')->delete();
DB::table('category')->delete();
DB::commit();
} catch (Exception $e) {
DB::rollBack();
//do something
}
hhhhhhhhhhhh
@CHAUTU hhhhhhhhhhhhhhh