hibernate 隔离级别——不可重复读

Posted 一本正经的正襟危坐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate 隔离级别——不可重复读相关的知识,希望对你有一定的参考价值。

不可重复读,unrepeatable read,翻译出来的无法体会原词含义。翻译成无法重复读会更好一些,或者直接用英文更能体会原意。

unrepeatable read是相对repeatable read,即可重复读。这个需求是,保证可以重复读取一条数据,详细的说法是,保证在一个事务中,重复读取一条数据,这条数据不变(即这条数据不会被其他事务改变)。

一个完整的transaction中不受到其他的transaction影响。

例如转账,A转账给B,在这个transaction发生的同时,A的电费自动扣款也发生了。

假设,在A转账这个transaction中,有3次访问数据库:

第1次,查询,获取金额。

第2次,更改金额。

第3次,再查询,获取余额。

我们定义,这三次是一个完整的事件。那么在这个事件中就不能受到电费自动扣款的影响(主要是第3次查询数据库)。

这就是repeatable read(可重复读,在一个完整的transaction中)。

 

 

3.0.2 事务并发问题

  • 脏读:读到了某个事务还未提交的数据。

  • 不可重复读:一个事务读到了另一个事务已经提交的更改的数据

  • 幻读/虚读:一个事务读到了另一个事务已经提交的新增的数据

3.0.3 事务的隔离级别

  • 1读未提交:一个事务在执行过程中,可以读取其他事务未提交的数据。如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据。

  • 2读已提交:一个事务在执行过程中,可以读取其他事务已经提交的数据,可以有效防止脏读

  • 4可重复读:一个事务在执行过程中,可以访问其他事务成功提交的新插入的数据,但是不可以访问其他事务成功修改的事务。读取数据的事务将会禁止写事务但是允许读事务,写事务则禁止任何其他事务。此隔离级别可有效的防止不可重复读和脏读

  • 8序列化/串行化:提供严格的事务隔离,它要求事务序列化执行,不能并发执行。可以有效的防止脏读、不可重复读和幻读

以上是关于hibernate 隔离级别——不可重复读的主要内容,如果未能解决你的问题,请参考以下文章

什么是脏读不可重复读幻读?一文带你搞定MySQL事务隔离级别

什么是脏读不可重复读幻读?一文带你快速搞定MySQL事务隔离级别

数据库事务隔离级别-- 脏读幻读不可重复读(清晰解释)

数据库事务隔离级别-- 脏读幻读不可重复读

数据库事务隔离级别脏读重复读不可重复读幻读

事务的隔离级别的演示:避免不可重复读