简单的事务分析及使用

事务的4大特性:

1 :原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行。

2 :一致性(consistency):事务在完成时,必须是所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有  数据的完整性。(实例:转账,两个账户余额相加,值不变。)

3 :隔离性(isolation):一个事务的执行不能被其他事务所影响。

4 : 持久性(durability):一个事务一旦提交,事物的操作便永久性的保存在DB中。即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。这里要说明的是jdbc事务:

案例:jack要把自己账户的一百元转给rose

数据库操作:

1 SELECT * FROM bank;
2 
3 --数据库里面的事务  rollback是事务的回滚  commit是提交事务
4 BEGIN;
5 UPDATE bank SET bmoney=bmoney-100 WHERE bname='jack';
6 UPDATE bank SET bmoney=bmoney+100 WHERE bname='rose';
7 COMMIT;

 java代码处理:

 1 public class testTransaction {
 2 
 3     static String url = "jdbc:mysql://127.0.0.1:3306/week11?useUnicode=true&characterEncoding=utf-8&useSSL=false";
 4     static String name = "root";
 5     static String pass = "root";
 6 
 7     public static void main(String[] args) {
 8 
 9         Connection connection = null;
10         PreparedStatement ps = null;
11         ResultSet rs = null;
12 
13         // 加载驱动
14         try {
15             Class.forName("com.mysql.jdbc.Driver");
16 
17             // 获取连接
18             connection = (Connection) DriverManager.getConnection(url, name, pass);
19 
20             //关闭事务的自动提交,我们手动提交事务
21             connection.setAutoCommit(false);
22             
23             // java里面的事务  jack把自己的100块钱给rose
24             // jack少了100块钱,rose多了一百块钱
25             
26             String sql="UPDATE bank SET bmoney=bmoney-100 WHERE bname='jack'";
27             ps=(PreparedStatement) connection.prepareStatement(sql);
28             
29             //执行减100的操作
30             int result=ps.executeUpdate();
31             
32             //执行加100的操作
33             String sql2="UPDATE bank SET bmoney=bmoney+100 WHERE bname='rose'";
34             int result2=ps.executeUpdate(sql2);
35             
36             connection.commit();//提交当前事务
37             
38             System.out.println(result+" : "+ result2);
39             
40         } catch (Exception e) {
41             // TODO Auto-generated catch block
42             e.printStackTrace();
43         }
44 
45     }

 结果:

原文地址:https://www.cnblogs.com/dabu/p/12968480.html