Transaction là gì

Chắc hẳn các bạn sẽ nghe những tới transaction trong thiết kế, hệ điều hành… vậy transaction là gì?

1. Transaction là gì?

Transaction là 1 trong giao dịch (tốt còn gọi là 1 giao tác) bao gồm 1 loạt các hành động được phải được thực hiện thành công xuất sắc cùng mọi người trong nhà, nếu 1 hành vi thất bại thì tất cả những hành động vào loạt hành động này sẽ trsinh sống về tâm trạng thuở đầu.

You watching: Transaction là gì

lấy ví dụ như bạn gồm 2 thông tin tài khoản ngân hàng A cùng B, bạn đưa 1.000.000đ trường đoản cú thông tin tài khoản A vào tài khoản B.

Transaction tại đây sẽ 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 giờ A bị trừ 1.000.000đ tuy nhiên vì chưng 1 nguyên do gì đó B bị lỗi không nhận được 1.000.000đ thì transaction sẽ bị hủy, số tiền của 2 thông tin tài khoản A với B sẽ không bị đổi khác.

Chính bởi ràng đề xuất kết thúc với mọi người trong nhà yêu cầu transaction được áp dụng các trong số hành động đề xuất độ tin cẩn, đảm bảo tính đúng mực dữ liệu…

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

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

Thông thường một số trong những ngôi trường hợp vì chưng phần cứng, mạng mạng internet mà transaction hoạt động sai trái cùng tín đồ ta đề nghị ghi log lại để khắc phục và hạn chế điều này.

Ví dụ:

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

Nếu chúng ta chưa thừa nhận được 1.000.000đ thì vẫn cần thông báo với ngân hàng, họ sẽ kiểm tra log bên trên server và log trên cây ATM để chứng thực với hoàn lại lại chi phí cho chính mình.

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

JDBC Chịu đựng trách rưới nhiệm tiếp xúc cùng với database cho nên nó sẽ triển khai sản xuất transaction khi truy nã vấn dữ liệu cho tới database.

See more: Một Số Vấn Đề Về Nền Kinh Tế Thị Trường Là Gì ? Một Số Vấn Đề Về Nền Kinh Tế Thị Trường

Mình đã thực hiện code ví dụ ngôi trường thích hợp chuyển khoản giữa 2 tài khoản bank.

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

Tài khoản A cùng thông tin tài khoản B đều có 90.000.000đ, hiện thời ta triển khai đưa 50.000.000đ từ A thanh lịch B trong trường vừa lòng bao gồm và ko dùng transaction để xem kết quả:

Ở ví dụ này bản thân sử dụng:

Eclipse

Tạo cơ sở 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) tức là số thực bao gồm 5 chữ số sau vệt phẩy và chữ 8 số trước lốt phẩy, ví như update amount >= 100.000.000,0 Tức là lớn hơn 8 chữ số trước dấu phẩy nên vẫn xẩy ra lỗi.cột name mình để là unique Có nghĩa là không trùng nhau, giả dụ trung đang xảy ra lỗi.Tạo 2 phiên bản ghi mang lại thông tin 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 chuyển 50.000.000đ trường đoản cú A sang B cơ mà gồm áp dụng transaction:

A bị trừ 50.000.000đ còn B được cộng thêm 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 chotsale.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): dữ liệu đã chỉ update vào database Khi điện thoại tư vấn lệnh commit() dbConnection.rollback(): rước lại dữ liệu thuở đầu.

Kết quả:

*

Câu lệnh update đầu tiên thành công xuất sắc tuy vậy câu lệnh update thứ hai xảy ra lỗi lên dữ liệu đã không biến thành thế đổi

Thực hiện tại gửi 50.000.000đ từ bỏ A sang B mà lại không thực hiện transaction:

package chotsale.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 đầu tiên thành công nó đã update dữ liệu vào database luôn

Câu lệnh sản phẩm công nghệ hai xẩy ra lỗi nhưng mà ko hồi sinh lại dữ liệu đang thay đổi trước đó.

Trên đây là ví dụ đơn giản và dễ dàng tuyệt nhất về transaction, những bạn cũng có thể thử với trường phù hợp không giống.

See more: Dư Nợ Là Gì ? Các Khái Niệm Liên Quan Đến Dư Nợ Tín Dụng Hướng Dẫn Cách Thanh Toán Dư Nợ Đúng Cách

Ví dụ cột name mình đã để là quality –> các bạn sử dụng transaction, thực hiện câu lệnh insert new trương mục với name là C, D, A nó đang xẩy ra lỗi cùng ko insert gì cả vì A sẽ vĩnh cửu sẵn vào 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ụ bên trên trên đây

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