事务的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 }
结果: