spring,springboot之事务(事务隔离级别详解)

事务隔离级别

1:DEFAULT

DEFAULT 这是spring默认的隔离级别,表示使用数据库默认的事务隔离级别。另外四个与JDBC的隔离级别相对应。

2:READ_UNCOMMITTED

READ_UNCOMMITTED 这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻读。

3:READ_COMMITTED

这是Sql Server , Oracle默认隔离级别
READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻读。

4:REPEATABLE_READ

这是MySQL-InnoDB默认隔离级别
REPEATABLE_READ这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻读。

5:SERIALIZABLE

SERIALIZABLE 事务被处理为顺序执行。防止脏读,不可重复读,防止幻读。

脏读、不可重复读、幻读

1:脏读

脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

1:小明工资1000,财务人员将小明工资改成8000,但是未提交事务。
2:小明发现自己工资8000(事务未提交期间)。
3:财务发现操作错误,回滚事务。工资变成1000。
描述:在事务未提交的时候,另一个事务读取到了未提交事务的数据。

2:不可重复读

不可重复读:在一个事务中前后两次读取的结果并不致,导致了不可重复读。

1:事务1中,小明发现自己工资1000,操作没有完成。
2:事务2中,财务修改小明的工资为8000,提交事务。
3:事务1中,小明再次读取自己工资发现变成了8000。
描述:针对与修改数据,一次事务读取数据前后两次不一样。(愿意期间被别的事务修改了值)

3:幻读

第一个事务对一个表中的全部数据行进行了修改。同时,第二个事务向表中插入一行新数据。那么操作第一个事务的用户发现表中还有未修改的数据行。

1:事务1中,读取工资为1000的有1000个员工。
2:事务2向员工表新增一条员工数据,工资也是1000.
3:事务1中,再次读取发现工资为1000的员工有1001个。
描述:针对新增或者删除,一次事务读取数据前后两次不一样。(愿意期间被别的事务新增或者删除了值)

你可能感兴趣的:(java,java,spring)