Transaction Sql Là Gì

     
Tìm đọc SQL Transaction và cách áp dụng trong Laravel Báo cáo

Bài đăng này dường như không được cập nhật trong 2 năm

Bài toán thực tế

Trước khi tò mò về SQL Transaction là gì và giải pháp sử dụng ra làm sao thì chúng ta cùng xem sang 1 bài toán sau đây để hình dung ra cách vận dụng transaction bao giờ nhé.

Bạn đang xem: Transaction sql là gì

Trong giao dịch ngân hàng: tài khoản anh A tất cả 5 tỉ, chị B có 0 đồng


*

*

Sẽ có hai phép update diễn ra trong khối hệ thống ngân hàng như sau:

Trừ đi 2 tỉ trong thông tin tài khoản anh A

Tài khoản anh A còn 3 tỉ.Câu lệnh SQL tương ứng: UPDATE VÍTIỀN set tiền=3tỉ WHERE tên=anhA

Cộng thêm 2 tỉ vào thông tin tài khoản chị B


Tài khoản chị B lúc này là 2 tỉ.Câu lệnh SQL tương ứng: UPDATE VÍTIỀN set tiền=2tỉ WHERE tên=chịB

Tuần tự thực hiện là vậy. Mặc dù do số đen, lệnh cộng thêm tiền vào tài khoản chị B bị lỗi. Nỗ lực là tài khoản anh A thì mất 2 tỉ, còn chị B vẫn 0 đồng buộc phải ko thể sở hữu máy cất cánh đi chơi.

Điều này sẽ không thể chấp nhận được vị 2 tỷ đột nhiên biến mất! Khi thực hiện hai lệnh trên trong một transaction, nó đã đảm bảo:

Hoặc cả nhì lệnh update đông đảo được thực hiện thành công. Cả hai thông tin tài khoản được update với số chi phí tương ứng.Hoặc trong trường hợp thanh toán bị lỗi cả hai lệnh hầu như không được thực hiện. Nhì tài khoản giữ nguyên số tiền như lúc trước khi tiến hành giao dịch (trước khi anh A gửi tiền)

Để hệ thống làm được các việc trên, rất đối kháng giản, thuộc mình mày mò SQL Transaction trong bài viết này nhé.

Transaction là gì?

Transaction vào SQL là một trong những nhóm các câu lệnh SQL, xử lý có tuần trường đoản cú các thao tác trên cơ sở tài liệu . Giả dụ một transaction được tiến hành thành công, tất cả các thay đổi dữ liệu được tiến hành trong transaction được lưu lại vào đại lý dữ liệu. Trường hợp một transaction bị lỗi cùng được rollback thì toàn bộ các sửa đổi dữ liệu sẽ ảnh hưởng xóa (dữ liệu được phục hồi về tâm trạng trước khi thực hiện transaction).


*

Transaction tất cả một chuẩn gọi là ACID bao gồm 4 trực thuộc tính:

Atomicity (Tính từ trị): Đảm bảo toàn bộ các hành vi trong phạm vi một đơn vị transaction là thành công hoàn toàn. Ngược lại, transaction sẽ bị dừng ngay ở thời gian lỗi, và sẽ hồi phục quay ngược (rollback) lại thời gian chưa xẩy ra sự nắm đổi.Consistency (Tính nhất quán): Đảm bảo toàn bộ các làm việc trên cơ sở tài liệu được đổi khác sau khi thanh toán thành công cùng không xẩy ra lỗi.Isolation (Tính cô lập): Đảm bảo transaction này hoạt động độc lập so với transaction khác. Lấy một ví dụ C đang chuyển khoản thì sẽ không còn liên quan lại tới D gửi tiền.Durability (Tính bền vững): Đảm bảo tác dụng hoặc ảnh hưởng tác động của transaction vẫn luôn tồn tại, tất cả khi hệ thống xảy ra lỗi.Xử lý Transaction

Các lệnh sau đây được thực hiện để cách xử trí transaction:

COMMIT: để lưu các thay đổi.

Xem thêm: Chế Độ Nào Cho Phép Hiển Thị Nhiều Bản Sao Của Cùng Bảng Tính Trên Cùng Một Màn Hình

ROLLBACK: để phục sinh lại những thay đổi.

Các lệnh điều khiển và tinh chỉnh transaction chỉ được sử dụng với những lệnh làm việc dữ liệu DML như: INSERT, UPDATE cùng DELETE.


Chúng cần yếu được sử dụng trong lệnh CREATE TABLE hoặc DROP TABLE bởi vì các vận động này được tự động hóa được commit trong đại lý dữ liệu.

Sử dụng Transaction vào MySQL

Một transaction được ban đầu với câu lệnh:

START TRANSACTION;BEGIN;Nhưng trước khi sử dụng các bạn nên sử dụng câu lệnh: phối autocommit = 0 sinh hoạt trước, khoác định thuộc tính autocommit = 1, Transaction vẫn được tự động hóa hoàn thành mà không cần thiết phải sử dụng COMMIT hoặc ROLLBACK.

Ví dụ:

SET autocommit = 0;START TRANSACTION;BEGIN;UPDATE VÍTIỀN set tiền=3tỉ WHERE tên=anhA;UPDATE VÍTIỀN mix tiền=2tỉ WHERE tên=chịB;COMMIT;ROLLBACK;Sử dụng Transaction vào LaravelNếu các bạn đang thao tác với Laravel thì việc sử dụng Transaction rất 1-1 giản


*

Sử dụng cách thức transaction trong DB facade để bắt đầu 1 transaction, kiểu như này

use DB;......DB::transaction(function () DB::table("users")->update(<"votes" => 1>); DB::table("posts")->delete(););Nếu một exception bị bắn ra từ trong transaction Closure, transaction sẽ tự động được rollback lại. Trường hợp Closure tiến hành thành công, transaction sẽ tự động hóa được commit. Laravel sẽ tự động rollback hoặc commit khi sử dụng hàm transaction nên các bạn ko cần lo lắng về 2 thao tác làm việc trên (rollback hay commit).


Xử lí Deadlocks

Method transaction có thêm 1 tham số thứ hai là số lần triển khai lại transaction nếu như trình trạng Deadlocks (bế tắc) xảy ra. Khi lặp tần số đấy cơ mà transaction vẫn không được commit thì một exception sẽ tiến hành bắn ra.

use DB;...DB::transaction(function () DB::table("users")->update(<"votes" => 1>); DB::table("posts")->delete();, 5);Thực hiện tại transaction thủ công

Bạn rất có thể thao tác cai quản transaction một cách bằng tay như lúc nào mới rollback hoặc lúc nào mới commit một giải pháp tùy ý:

// ban đầu các hành vi trên CSDLDB::beginTransaction();...//Commit tài liệu khi hoàn thành kiểm traDB::commit();...//Gặp lỗi như thế nào đó mới rollbackDB::rollBack();...Một ví dụ đối chọi giản cho bạn dễ hiểu nhé:

public function doAction() DB::beginTransaction(); try DB::table("users")->update(<"votes" => 1>); DB::table("posts")->delete(); DB::commit(); catch (Exception $e) DB::rollBack(); throw new Exception($e->getMessage()); Trong method doAction:

Bắt đầu transaction cùng với DB::beginTransaction();Việc tiến hành câu lệnh SQL DB::table("users")->update(<"votes" => 1>); và DB::table("posts")->delete(); mình cho vô khối try catchNếu try triển khai 2 lệnh thành công xuất sắc thì DB::commit(); => xác nhận transaction kết thúc và bảo quản các biến hóa trong database từ lệnh SQL update.Nếu tất cả lỗi và nhảy vào catch thì DB::rollBack(); => quay lại từ lúc transaction chưa được triển khai (không lưu giữ các đổi khác trong database trường đoản cú lệnh SQL update ) đồng thời bắn ra 1 exception.

Xem thêm: Lý Thuyết Hình Thang Là Gì? Dấu Hiệu Nhận Biết Hình Thang Cực Đơn Giản, Dễ Hiểu

Cũng dễ nắm bắt mà nhẩy.

kimsa88
cf68