Transaction Là Gì

Chắc hẳn bạn đã nghe nhiều cho tới transaction vào lập trình, hệ điều hành… vậy transaction là gì?

1. Transaction là gì?

Transaction là 1 trong những thanh toán (tốt có cách gọi khác là 1 giao tác) bao gồm 1 loạt những hành động được yêu cầu được triển khai thành công với mọi người trong nhà, giả dụ 1 hành vi không thắng cuộc thì toàn bộ các hành vi trong loạt hành động đó sẽ trsống về tâm trạng lúc đầu.

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

Ví dụ các bạn gồm 2 tài khoản ngân hàng A với B, bạn đưa 1.000.000đ từ bỏ tài khoản A vào thông tin tài khoản B.

Transaction tại đây vẫn có 2 hành động:

Tài khoản A bị trừ 1.000.000đTài khoản B cộng thêm 1.000.000đ

Bây giờ đồng hồ A bị trừ 1.000.000đ mà lại do 1 nguyên do nào đấy B bị lỗi không sở hữu và nhận được 1.000.000đ thì transaction có khả năng sẽ bị diệt, số tài chính 2 tài khoản A với B đã không xẩy ra biến hóa.

Chính do ràng nên chấm dứt cùng mọi người trong nhà đề xuất transaction được vận dụng những trong số hành động tận hưởng độ tin cậy, bảo vệ tính đúng mực dữ liệu…

Hướng dẫn Java JDBC: Transaction là gì? Code ví dụ transaction cùng với JDBC

Nhược điểm của transaction

Thông thường một số ngôi trường đúng theo vì chưng Hartware, mạng internet nhưng transaction chuyển động không ổn cùng fan ta bắt buộc ghi log lại để khắc phục điều đó.

Ví dụ:

Quý khách hàng ra cây ATM rút ít tiền, các bạn gửi lệnh rút 1.000.000đ, thông tin tài khoản vào ngân hàng bị trừ 1.000.000đ dẫu vậy sau đấy mất mạng –> thiết yếu xác minh được cây ATM sẽ trả chi phí ra chưa, bắt buộc số tiền 1.000.000đ sẽ không được trả lại tài khoản.

Nếu bạn không dấn được 1.000.000đ thì sẽ đề xuất thông báo cùng với ngân hàng, bọn họ sẽ bình chọn log bên trên hệ thống và log bên trên cây ATM để xác thực và trả lại lại tiền cho bạn.

2. lấy một ví dụ Transaction với JDBC

JDBC Chịu đựng trách nhiệm tiếp xúc cùng với database vì vậy nó đang triển khai chế tạo ra transaction lúc truy nã vấn dữ liệu tới database.

Xem thêm: Through Thick And Thin Nghĩa Là Gì, Thick And Thin Nghĩa Là Gì

Mình sẽ thực hiện code ví dụ ngôi trường hợp giao dịch chuyển tiền giữa 2 thông tin tài khoản ngân hàng.

Giả sử số tiền trong những thông tin tài khoản chỉ được cất số chi phí nhỏ hon 100.000.000đ, ví như 1 tài khoản được cập nhật số tiền >= 100.000.000đ thì sẽ xảy ra lỗi.

Tài khoản A với tài khoản B đều phải có 90.000.000đ, hiện giờ ta tiến hành đưa 50.000.000đ từ bỏ A quý phái B trong ngôi trường đúng theo có cùng không cần sử dụng transaction giúp thấy kết quả:

Tại ví dụ này bản thân sử dụng:

Eclipse

Tạo cửa hàng dữ liệu: “demo-jdbc-transaction”

CREATE SCHEMA `demo-jdbc-transaction` ;Tạo table “account_banking”

CREATE TABLE `demo-jdbc-transaction`.`account_banking` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NULL, `amount` DECIMAL(13,5) NULL, PRIMARY KEY (`id`), UNIQUE INDEX `name_UNIQUE` (`name` ASC));cột amount mình nhằm là DECIMAL(13,5) Có nghĩa là số thực tất cả 5 chữ số sau dấu phẩy với chữ 8 số trước vệt phẩy, nếu như update amount >= 100.000.000,0 Có nghĩa là lớn hơn 8 chữ số trước dấu phẩy đề nghị đang xẩy ra lỗi.cột name bản thân nhằm là unique Có nghĩa là ko trùng nhau, nếu như trung đang xảy ra lỗi.Tạo 2 bạn dạng ghi mang đến tài khoản A cùng B:

INSERT INTO `demo-jdbc-transaction`.`account_banking` (`name`, `amount`) VALUES ("A", 90000000.0);INSERT INTO `demo-jdbc-transaction`.`account_banking` (`name`, `amount`) VALUES ("B", 90000000.0);

*

Code ví dụ:

*

Hướng dẫn Java JDBC: Transaction là gì? Code ví dụ transaction với JDBC

Thực hiện nay gửi 50.000.000đ tự A lịch sự B cơ mà gồm sử dụng transaction:

A bị trừ 50.000.000đ còn B được thêm vào đó 50.000.000đ yêu cầu sẽ update amount của A thành 40.000.000đ còn B là 140.000.000đ

package gamesbaidoithuong.com.demojdbc.statement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;public class UpdateWithTransaction public static void main(String<> args) throws SQLException, ClassNotFoundException Class.forName("com.mysql.jdbc.Driver"); Connection dbConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo-jdbc-transaction", "root", "admin1234"); Statement stmt = dbConnection.createStatement(); dbConnection.setAutoCommit(false); try stmt.executeUpdate("UPDATE account_banking SET amount = 40000000.0 WHERE name = "A""); stmt.executeUpdate("UPDATE account_banking SET amount = 140000000.0 WHERE name = "B""); dbConnection.commit(); catch (Exception e) e.printStackTrace(); dbConnection.rollback(); dbConnection.close(); Giải thích:

dbConnection.setAutoCommit(false): dữ liệu sẽ chỉ update vào database Lúc hotline lệnh commit() dbConnection.rollback(): rước lại tài liệu lúc đầu.

Kết quả:

*

Câu lệnh update đầu tiên thành công xuất sắc mà lại câu lệnh update thứ 2 xẩy ra lỗi lên dữ liệu vẫn không trở nên vắt đổi

Thực hiện tại đưa 50.000.000đ từ A thanh lịch B nhưng mà không sử dụng transaction:

package gamesbaidoithuong.com.demojdbc.statement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;public class UpdateWithoutTransaction public static void main(String<> args) throws SQLException, ClassNotFoundException Class.forName("com.mysql.jdbc.Driver"); Connection dbConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo-jdbc-transaction", "root", "admin1234"); Statement stmt = dbConnection.createStatement(); stmt.executeUpdate("UPDATE account_banking SET amount = 40000000.0 WHERE name = "A""); stmt.executeUpdate("UPDATE account_banking SET amount = 140000000.0 WHERE name = "B""); dbConnection.close(); Kết quả:

*

Sau lúc câu lệnh đầu tiên thành công nó vẫn update tài liệu vào database luôn

Câu lệnh thiết bị hai xảy ra lỗi nhưng lại ko phục sinh lại tài liệu vẫn biến hóa trước đó.

Trên đây là ví dụ đơn giản tốt nhất về transaction, những bạn có thể demo với ngôi trường đúng theo khác.

lấy ví dụ cột name bản thân sẽ nhằm là unique –> chúng ta thực hiện transaction, tiến hành câu lệnh insert bắt đầu account với name là C, D, A nó đã xảy ra lỗi cùng ko insert gì cả do A sẽ mãi mãi sẵn trong database.

Hướng dẫn Java JDBC: Transaction là gì? Code ví dụ transaction cùng với JDBC

Okay, Done!

Download code ví dụ trên trên đây

References: https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html