简单易懂理解事务的隔离级别
程序员文章站
2022-06-25 09:55:04
在讲事务的隔离级别,我们先得回忆一下事务的隔离性 事务的隔离性是在当多个用户并发访问数据库时,比如说操作同一张表时,数据库为每一个用户开启事务,不能被其他事务的操作所干扰,多个并发事务之间需要相互隔离。即要达到这样的一种效果:对于任意的两个并发事务T1和T2,在事务T1看来,T2要么在T1开始之前结 ......
在讲事务的隔离级别,我们先得回忆一下事务的隔离性
事务的隔离性是在当多个用户并发访问数据库时,比如说操作同一张表时,数据库为每一个用户开启事务,不能被其他事务的操作所干扰,多个并发事务之间需要相互隔离。即要达到这样的一种效果:对于任意的两个并发事务t1和t2,在事务t1看来,t2要么在t1开始之前结束,要么就是在t1结束之后才开始,这样每个事务都感觉不到有其他的事务在并发的执行。
一共分为四个隔离级别:
读未提交(read uncommitted):最低的隔离级别,允许其他事务看到没有提交的数据,会导致脏读。
读已提交(read committed):被读取的数据可以被其他事务修改,这样可能导致不可重复读。也就是说,事务读取的时候获取读锁,但是在读完之后立刻释放(不需要等事务结束),而写锁则是事务提交后才释放,释放读锁之后,就可能被其他的事务修改数据。对于我们常用的数据库(mysql,sql server,oracle)的默认隔离等级就是该等级。
可重复读(repeatable read):也就是在开始读取数据时(事务开启时),不允许修改操作。
序列化(serializable): 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。
以上的隔离级别从上到下依次增强。