天天看点

关于达梦数据库事务的隔离级别介绍1、 达梦与Oracle支持的隔离级别2、隔离级别的实现

关于达梦数据库事务的隔离级别介绍

  • 1、 达梦与Oracle支持的隔离级别
    • 脏读
    • 不可重复读
    • 幻读
  • 2、隔离级别的实现
    • 读提交隔离级
    • 串行化隔离级
    • 读未提交隔离级
    • 只读事务

1、 达梦与Oracle支持的隔离级别

达梦 Oracle
读未提交
读提交 读提交
重复读 重复读
序列化 序列化

然后我们再来看SQL-92 定义的四个隔离级别

关于达梦数据库事务的隔离级别介绍1、 达梦与Oracle支持的隔离级别2、隔离级别的实现

也就是说Oracle数据库是没有脏读的,达梦和Oracle一样默认的隔离级别都是读提交。

首先我们先来认识一下脏读、不可重复读、幻读的概念,再来介绍怎么实现这几种隔离级别。

脏读

比如说我们开启2个会话,当A会话的事务可以读取到B会话的已修改尚未提交的事务,这个时候就会产生脏读。

不可重复读

当A会话的同一个事务、同一个查询,如果是因为其他会话的事务修改过或删除的数据,造成查询的数据不一致。这种现象称为不可重复读。

幻读

当A会话的同一个事务、同一个查询,如果是因为其他会话的事务添加的数据,造成查询的数据不一致。这种现象称为幻读。

2、隔离级别的实现

读提交隔离级

数据库的读提交隔离可以确保只访问到已提交事务修改的数据,保证数据处于一致性状态。

串行化隔离级

在要求消除不可重复读取或幻像读的情况下,我们可以设置事务隔离级为串行化。跟读提交隔离级相比,串行化事务的查询本身不会增加任何代价,但修改数据可能引发“串行化事务被打断”错误。

具体来说,当一个串行化事务试图更新或删除数据时,而这些数据在此事务开始后被其他事务修改并提交时,DM 数据库将报“串行化事务被打断”错误。应用开发者应该充分考虑串行化事务带来的回滚及重做事务的开销,从应用逻辑上避免对相同数据行的激烈竞争导致产生大量事务回滚。并结合应用逻辑,捕获“串行化事务被打断”错误,进行事务重做等相应处理。如果系统中存在长时间运行的写事务,并且该长事务所操作的数据还会被其他短事务频繁更新的话,最好避免使用串行化事务。

读未提交隔离级

读未提交隔离级别是最不严格的隔离级别。实际上,在使用这个隔离级别时,会发生脏读、不可重复读和幻像。一般来说,读未提交隔离级别通常只用于访问只读表和只读视图,以消除可见性判断带来的系统开销,提升查询性能。

只读事务

除了前面所述的各种标准特性外,DM 数据库还支持只读事务,只读事务只能访问数据,但不能修改数据。并且只读事务不会改变事务原有的隔离级。