事务隔离级别

在数据库中,事务隔离级别是十分基础且重要的概念,不同的事物隔离级别对应于不同的并发处理策略,经典的事物隔离级别划分如下表所示:

隔离级别 脏读 不可重复读 幻读
未提交读(READ UNCOMMITED) 可能 可能 可能
已提交读(READ COMMITED) 不可能 可能 可能
可重复读(REPEATABLE-READ) 不可能 不可能 可能
可串行化(SERIALIZABLE) 不可能 不可能 不可能

相关概念


脏读
在两个并发的事务中,如果事务A修改了一个数据,且尚未提交,此时事务B可以读取到该未提交的数据,此时读到的数据认为是脏读。
不可重复读
事务A内,读取了一个数据,事务A还没有结束时,事务B也访问并修改了这个数据,提交。紧接着,事务A又读这个数据。由于事务B的修改已经提交,那么事务A前后两次读到的的数据是不一样的,因此对事务A来说,称为是不可重复读。
幻读
事务A进行查询得到X条数据,此时事务B插入新的数据并提交,随后事务A再次进行查询,得到X+1条数据,出现“幻行”

注意:不可重复读和幻读的区别是:前者是指读到了已经提交的事务的更改数据(修改或删除),后者是指读到了其他已经提交事务的新增数据。
对于不可重复读,防止读到更改/删除数据,只需对操作的数据添加行级锁,防止操作中的数据因其他事务发生变化;而防止读到新增数据,则需要添加表级锁,将整张表锁定,防止新增数据以避免幻读。

由此可知上述不同事务隔离级别在并发情况下,所支持的数据读取(保护)情况。Postgresql数据库默认的隔离等级为READ COMMITED,也是大多数关系型数据库的默认等级。

你可能感兴趣的:(事务隔离级别)