Spring事务的理解

 事务的基本原理:spring

Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是没法提供事务功能的。对于纯JDBC操做数据库,想要用到事务,能够按照如下步骤进行:数据库

  1. 获取链接 Connection con = DriverManager.getConnection()
  2. 开启事务con.setAutoCommit(true/false);
  3. 执行CRUD
  4. 提交事务/回滚事务 con.commit() / con.rollback();
  5. 关闭链接 conn.close();

数据库隔离级别并发

隔离级别 隔离级别的值 致使的问题
Read-Uncommitted 0     致使脏读
Read-Committed 1 避免脏读,容许不可重复读和幻读
Repeatable-Read 2 避免脏读,不可重复读,容许幻读
Serializable 3 串行化读,事务只能一个一个执行,避免了脏读、不可重复读、幻读。执行效率慢,使用时慎重

脏读:一事务对数据进行了增删改,但未提交,另外一事务能够读取到未提交的数据。若是第一个事务这时候回滚了,那么第二个事务就读到了脏数据。性能

不可重复读:一个事务中发生了两次读操做,第一次读操做和第二次操做之间,另一个事务对数据进行了修改,这时候两次读取的数据是不一致的。spa

幻读:第一个事务对必定范围的数据进行批量修改,第二个事务在这个范围增长一条数据,这时候第一个事务就会丢失对新增数据的修改。接口

总结:事务

隔离级别越高,越能保证数据的完整性和一致性,可是对并发性能的影响也越大。ci

大多数的数据库默认隔离级别为 Read Commited,好比 SqlServer、Oracle开发

少数数据库默认隔离级别为:Repeatable Read 好比: MySQL InnoDBget

 

对于项目中须要使用到事务的地方,我建议开发者仍是使用spring的TransactionCallback接口来实现事务,不要盲目使用spring 事务注解,若是必定要使用注解,那么必定要对spring事务的传播机制和隔离级别有个详细的了解,不然极可能发生意想不到的效果。

相关文章
相关标签/搜索