在jdbc中处理事务,都是通过Connection完成的(同一事务中所有的操作,都在使用同一个Connection对象),Connection的三个方法与事务相关:
- setAutoCommit(boolean):设置是否为自动提交事务,如果为true(默认值为true)表示自动提交,也就是每条执行的sql语句都是一个单独的事务,如果设置false,那么就相当于开启了事务;con. setAutoCommit(false)表示开启事务!!!
- commit():提交事务;con.commit():表示提交事务。
- rollback():回滚结束事务。con.rollback():表示回滚事务。
jdbc处理事务的代码格式:
try{
con. setAutoCommit(false);
...
...
con.commit();
}catch(){
con.rollback();
}
事务隔离级别
1、事务的并发读问题:
并发事务导致的问题大致有5类,其中两类是更新问题,三类是读取问题(下面)。
- 脏读:读取到另一个未提交数据的事务
- 不可重复读:两次读取不一致,因为另一事务对该记录做了修改
- 幻读(虚读):对同一张表的两次查询不一致,因为另一事务插入了一条记录
不可重复读和幻读的区别: - 不可重复读是读取到了另一个事物的更新;
- 幻读是读取到了另一个事务的插入(MySQL中无法测试到幻读)
2、四大隔离级别
4个等级的事务隔离级别,在不同数据环境下,使用相同的输入,执行相同的工作,根据不同的级别,可以导致不同的结果。不同事物隔离级别能够解决的数据并发问题的能力是不同的。