Tìm hiểu SQL Transaction và cách sử dụng trong Laravel
Bài đăng này đã không được cập nhật trong 2 năm Bài toán thực tếTrước khi tìm hiểu về SQL Transaction là gì và cách sử dụng như thế nào thì bạn cùng xem qua một bài toán dưới đây để hình dung ra cách áp dụng transaction khi nào nhé. Trong giao dịch ngân hàng: Tài khoản anh A có 5 tỉ, chị B có 0 đồng , một ngày đep zời, anh A chuyển cho chị B 2 tỉ để mua máy bay. Sẽ có hai phép cập nhật diễn ra trong hệ thống ngân hàng như sau: Trừ đi 2 tỉ trong tài khoản anh A
Cộng thêm 2 tỉ vào tài khoản chị B
Tuần tự thực hiện là vậy. Tuy nhiên do số đen, lệnh cộng thêm tiền vào tài khoản chị B bị lỗi. Thế là tài khoản anh A thì mất 2 tỉ, còn chị B vẫn 0 đồng nên ko thể mua máy bay đi chơi. Điều này không thể chấp nhận được vì 2 tỷ bỗng dưng biến mất! Khi thực hiện hai lệnh trên trong một transaction, nó sẽ đảm bảo:
Để hệ thống làm được các việc trên, rất đơn giản, cùng mình tìm hiểu SQL Transaction trong bài viết này nhé. Transaction là gì?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). Transaction có một chuẩn gọi là ACID bao gồm 4 thuộc tính:
Xử lý TransactionCác lệnh sau đây được sử dụng để xử lý transaction:
Các lệnh điều khiển transaction chỉ được sử dụng với các lệnh thao tác dữ liệu DML như: INSERT, UPDATE và DELETE. Chúng không thể được sử dụng trong lệnh CREATE TABLE hoặc DROP TABLE vì các hoạt động này được tự động được commit trong cơ sở dữ liệu. Sử dụng Transaction trong MySQLMột transaction được bắt đầu với câu lệnh:
Nhưng trước khi sử dụng bạn nên sử dụng câu lệnh: SET autocommit = 0 ở trước, mặc định thuộc tính autocommit = 1, Transaction sẽ được tự động hoàn thành mà không cần phải sử dụng COMMIT hoặc ROLLBACK. Ví dụ:
Sử dụng Transaction trong LaravelNếu bạn đang làm việc với Laravel thì việc sử dụng Transaction rất đơn giản Sử dụng phương thức transaction trong DB facade để bắt đầu 1 transaction, kiểu như này
Nếu một exception bị bắn ra từ trong transaction Closure, transaction sẽ tự động được rollback lại. Nếu Closure thực thi thành công, transaction sẽ tự động được commit. Laravel sẽ tự động rollback hoặc commit khi sử dụng hàm transaction nên bạn ko cần lo lắng về 2 thao tác trên (rollback hay commit). Xử lí Deadlocks Method transaction có thêm 1 tham số thứ 2 là số lần thực hiện lại transaction nếu trình trạng Deadlocks (bế tắc) xảy ra. Khi lặp số lần đấy mà transaction vẫn chưa được commit thì một exception sẽ được bắn ra.
Thực hiện transaction thủ công Bạn có thể thao tác quản lý transaction một cách thủ công như khi nào mới rollback hoặc khi nào mới commit một cách tùy ý:
Một ví dụ đơn giản cho bạn dễ hiểu nhé:
Trong method doAction:
Cũng dễ hiểu mà nhẩy. Kết luậnTrên đây mình đã giới thiệu với bạn SQL Transaction là gì? Cách sử dụng trong MySQL và Laravel như thế nào. Hi vọng từ bài viết này bạn có thể hiểu về Transaction và áp dụng vào các bài toán của mình. Nếu có thắc mắc và góp ý bạn comment phía dưới nhé. Cảm ơn bạn. Tham khảo: https://laravel.com/docs/5.7/database#database-transactions |