Transactions là gì

  -  

Chắc hẳn bạn sẽ nghe các 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à một trong những thanh toán (tốt có cách gọi khác là 1 giao tác) gồm 1 loạt những hành động được bắt buộc được thực hiện thành công xuất sắc cùng cả nhà, nếu như 1 hành vi không thắng cuộc thì tất cả các hành vi trong loạt hành vi này sẽ trlàm việc về tâm lý thuở đầu.

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

ví dụ như các bạn có 2 thông tin tài khoản bank A với B, chúng ta chuyển 1.000.000đ từ thông tin tài khoản A vào tài khoản B.

Transaction ở chỗ này sẽ bao gồm 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 tiếng A bị trừ 1.000.000đ cơ mà vì chưng 1 nguyên nhân gì đấy B bị lỗi không sở hữu và nhận được 1.000.000đ thì transaction sẽ ảnh hưởng hủy, số tài chính 2 tài khoản A cùng B sẽ không bị biến đổi.

Chính vị ràng bắt buộc xong xuôi cùng mọi người trong nhà đề xuất transaction được áp dụng những trong số hành vi thử dùng độ tin cẩn, bảo đảm an toàn 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

Đôi khi một số trong những trường vừa lòng vày phần cứng, mạng internet cơ mà transaction chuyển động bất ổn với người ta buộc phải ghi log lại nhằm khắc chế điều đó.

Ví dụ:

Quý khách hàng ra cây ATM rút ít chi phí, chúng ta gửi lệnh rút 1.000.000đ, thông tin tài khoản vào bank bị trừ 1.000.000đ tuy nhiên sau đấy mất mạng –> cần thiết xác minh được cây ATM đã trả chi phí ra chưa, nên số tiền 1.000.000đ sẽ không được hoàn trả tài khoản.

Nếu chúng ta không nhận được 1.000.000đ thì vẫn buộc phải thông báo với ngân hàng, chúng ta đã kiểm tra log trên server cùng log bên trên cây ATM để xác thực cùng hoàn trả lại tiền cho mình.

2. ví dụ như Transaction với JDBC

JDBC chịu trách rưới nhiệm giao tiếp với database vì vậy nó đang thực hiện tạo transaction Khi tróc nã vấn tài liệu tới database.

Xem thêm: Sự Khác Biệt Giữa Mp3 Là Gì, Sự Khác Biệt Giữa Mp3 Và Mp4

Mình vẫn triển khai code ví dụ trường thích hợp giao dịch chuyển tiền thân 2 tài khoản ngân hàng.

Giả sử số tiền trong những tài khoản chỉ được đựng số chi phí bé dại hon 100.000.000đ, nếu 1 tài khoản được cập nhật số tiền >= 100.000.000đ thì vẫn xẩy ra lỗi.

Tài khoản A và thông tin tài khoản B đều phải có 90.000.000đ, hiện thời ta thực hiện gửi 50.000.000đ từ A quý phái B trong ngôi trường đúng theo gồm và ko sử dụng transaction giúp xem kết quả:

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

Eclipse

Tạo các đại lý 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 để là DECIMAL(13,5) có nghĩa là số thực bao gồm 5 chữ số sau vệt phẩy với chữ 8 số trước vệt phẩy, giả dụ update amount >= 100.000.000,0 tức là lớn hơn 8 chữ số trước vết phẩy buộc phải sẽ xảy ra lỗi.cột name mình để là unique tức là ko trùng nhau, nếu trung sẽ xẩy ra lỗi.Tạo 2 phiên bản ghi cho tài khoản A và 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 quý phái B mà lại tất cả thực hiện transaction:

A bị trừ 50.000.000đ còn B được cộng thêm 50.000.000đ cần đã update amount của A thành 40.000.000đ còn B là 140.000.000đ

package luyenkimmau.com.vn.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): tài liệu đã chỉ update vào database Lúc Hotline lệnh commit() dbConnection.rollback(): rước lại dữ liệu ban sơ.

Kết quả:

*

Câu lệnh update trước tiên thành công xuất sắc tuy vậy câu lệnh update thứ 2 xẩy ra lỗi lên dữ liệu đang không biến thành nỗ lực đổi

Thực hiện chuyển 50.000.000đ tự A lịch sự B cơ mà ko sử dụng transaction:

package luyenkimmau.com.vn.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 Khi câu lệnh trước tiên thành công xuất sắc nó sẽ update dữ liệu vào database luôn

Câu lệnh sản phẩm nhị xảy ra lỗi nhưng mà ko hồi sinh lại dữ liệu sẽ biến hóa trước đó.

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

Xem thêm: Khái Niệm: Diện Tích Sử Dụng Là Gì ? Cùng Phân Biệt Diện Tích Sử Dụng Là Gì

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

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

Okay, Done!

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

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