1.Spring 事务实现方式有哪些?
- 声明式事务:声明式事务也有两种实现方式,基于xml 配置文件的方式和注解方式(在类上添加@Transaction)
- 编码方式:提供编码的形式管理和维护事务。
2.Spring 的事务隔离?
Spring 有五大隔离级别,默认值为 ISOLATION_DEFAULT(使用数据库的设置),其他四个隔离级别和数据库的隔离级别一致。
- ISOLATION_DEFAULT:用底层数据库的设置隔离级别,数据库设置的是什么我就用什么
- ISOLATION_READ_UNCOMMITTRD:未提交读,最低隔离级别,事务未提交前,就可被其他事务读取(会出现幻读,脏读,不可重复读);
- ISOLATION_READ_COMMITTED:提交读,一个事务提交后才能被其他事务读取到(会造成幻读、不可重复读),SQL Server 的默认级别。
- ISOLATION_REPEATABLE_READ:可重复读,保证多次读取同一个数据时,其值和事务开启的时候的内容是一致的,禁止读取到别的事务未提交的数据(会造成幻读),MYSQL 的默认级别。
- ISOLATION_SERIALIZABLE:序列化,代价最高最可靠的安全级别,该隔离级别能防止脏读,不可重复读,幻读。
脏读 :表示一个事务能够读取另一个事务中还为提交的数据。比如,某个事务尝试插入记录A,此时该事务还未提交,然后另一个事务尝试读取到了记录A。
不可重复读 :在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。
幻读 :指同一个事务内多次查询返回的结果集不一样,比如同一个事务A第一次查询时有n条记录,但在第二次同等条件下查询却有n+1条记录,这就好像产生了幻觉。发生幻读的原因也是另外一个事务新增或修改了第一个事务结果集里面的数据,同一个记录的数据内容被修改了,所有数据行的记录就变得多了或变得少了。