数据库 – 脏读、不可重复读、幻读与五大事务隔离级别及七大事务传播级别

脏读(Dirty Read)是指一个事务读取了另一个事务未提交的数据。当一个事务读取到了另一个事务的未提交数据,如果这个事务最终回滚,则读取到的数据是无效的,也就是脏数据。

不可重复读(Non-repeatable Read)是指一个事务在读取某个数据后,另一个事务修改了该数据并提交,导致第一个事务再次读取该数据时,得到的结果不同。这种情况下,第一个事务可能会发现自己读取到了不一致的数据。

幻读(Phantom Read)是指一个事务在读取某个范围的数据后,另一个事务在该范围内插入了新的数据,并提交,导致第一个事务再次读取该范围的数据时,发现有新增的数据。这种情况下,第一个事务会发现自己读取到了新插入的数据,就像出现了幻觉一样。

五大事务隔离级别(Five Transaction Isolation Levels)是指数据库中用于控制并发事务的隔离级别。常见的五个隔离级别是:

  1. 读未提交(Read Uncommitted):事务可以读取其他事务未提交的数据,存在脏读、不可重复读、幻读的问题。
  2. 读已提交(Read Committed):事务只能读取其他事务已提交的数据,解决了脏读的问题,但仍可能出现不可重复读和幻读。
  3. 可重复读(Repeatable Read):事务在整个过程中多次读取同一数据时,保证所读取的数据是一致的,解决了脏读和不可重复读的问题,但仍可能出现幻读。
  4. 串行化(Serializable):事务串行执行,保证了最高级别的隔离性,解决了所有并发问题,但可能导致性能下降。
  5. 未提交读(Read Uncommitted):事务可以读取其他事务未提交的数据,但其他事务不能读取当前事务未提交的数据。

七大事务传播级别(Seven Transaction Propagation Levels)是指事务在不同方法调用之间传播的级别。常见的七个传播级别是:

  1. REQUIRED:如果当前存在事务,则加入到当前事务中,如果当前没有事务,则新建一个事务。
  2. SUPPORTS:如果当前存在事务,则加入到当前事务中,如果当前没有事务,则以非事务的方式执行。
  3. MANDATORY:如果当前存在事务,则加入到当前事务中,如果当前没有事务,则抛出异常。
  4. REQUIRES_NEW:无论当前是否存在事务,都新建一个事务,并在自己的事务内执行。
  5. NOT_SUPPORTED:以非事务的方式执行操作,如果当前存在事务,则将其挂起。
  6. NEVER:以非事务的方式执行操作,如果当前存在事务,则抛出异常。
  7. NESTED:如果当前存在事务,则在当前事务的嵌套事务中执行,如果当前没有事务,则新建一个事务。
文章来源: https://www.vvcookie.com/12.html
上一篇
下一篇