当前位置:Gxlcms > 数据库问题 > 浅谈数据库的隔离等级

浅谈数据库的隔离等级

时间:2021-07-01 10:21:17 帮助过:14人阅读

说明一下这3中读取不具合现象

脏读

读取到别的事务还没有提交的数据的现象:

1.事务A要把记录a更新到记录b(还没提交时)

2.事务B查询了记录

3.事务A做了回滚

4.事务B读到了记录b

这是把隔离等级设到最低级别了啊,还没见过这样的系统。

 

不可重复读

读到了别的事务更新后的数据,导致出现了非连贯性的读取操作。

1.事务A查询了记录,称之为a

2.事务B把记录a的内容更新到记录b,并且提交了。

3.事务A对记录a再次进行查询,取得的内容已经变成了记录b。

幻影读

看到了其它事务插入的记录导致出现的非连贯现象。

1.事务A查询记录时没有记录。

2.事务B插入记录并提交。

3.事务A再次查询记录时取得了事务B插入的记录。

是不是感觉和不可重复读有点像呀,重点在是插入操作还是更新操作。

另外,下面也是幻影读

1.事务A统计记录是X件。

2.事务B插入记录并提交。

3.事务A再次统计记录,取得的件数是X+1件。

这就是关于读取操作的3种不具合现象。

 

事务隔离等级和读取不具合的关系

  脏读 不可重复读 幻影读
Read uncommitted 发生   发生 发生
Read committed 不发生 发生 发生
Repeatable read 不发生 不发生 发生
Serializable 不发生 不发生 不发生

 

 

 

 

 

这样看是不是觉得每次都选择设置隔离等级为Serializable(可序列化)就一劳永逸了呀,

其实隔离性设置高了也是有问题的啊。这文就不说明了,要不又是一大段,有兴趣的调查下吧。

 

关于几个重点

·设置隔离等级也不能说就一定可以保证不会发生对应的某种错误。和具体的数据库实装RDBMS有很大

关系,例如MySQL的REPEATABLE READ的隔离等级也不会发生幻影读。

·所谓的【保证不发生】,为了不发生错误而采取的处理方法也因数据库RDBMS而不同。在发生异常时

有些数据库会报异常,有的会等待事务结束。

·数据库RDBMS的默认隔离等级各异,对应的隔离级别也不同。

MySQL(InnoDB) REPEATABLE READ    
PostgreSQL READ COMMITTED    
Oracle READ COMMITTED    
SQL Server READ COMMITTED    

 

 

 

 

 

 

就这样,写这点也挺花时间,有空再更新关于SQLServer的死锁,锁升级和Trace跟踪。

 

浅谈数据库的隔离等级

标签:处理   log   事务   事务隔离   evel   默认   隔离   提交   性能   

人气教程排行