【赵渝强老师】达梦数据库的事务隔离级别

1

达梦数据库允许多个客户端同时访问。当这些客户端并发访问数据库中同一部分的数据时,如果没有采取必要的隔离措施就容易造成并发一致性问题,从而破坏数据的完整性。考虑下图中的场景:

2

在时间点1上,var的数值是100。客户端A在时间点2的时候更新了它的值为200,但没有提交事务。在时间点3的时候,客户端B读取到了客户端A还未提交的数值200。但在时间点4,客户端A执行了回滚操作。那么,对于客户端B来说,如果在时间点5再次读取数据,得到就应该是100。那么客户端B就有了数据不一致的问题。而造成问题的根本原因在,客户端B读取到了客户端A还没有提交的事务中的数据。

为了解决数据在并发访问时,数据的一致性问题。在SQL标准中定义了四种事务的隔离级别,它们分别是:读未提交(READ-UNCOMMITTED)、读已提交(READ-COMMITTED)、可重复读(REPEATABLE-READ)和可序列化读(SERIALIZABLE)。

达梦数据库支持三种事务隔离级别:读未提交(READ-UNCOMMITTED)、读提交(READ-COMMITTED)和串行化(SERIALIZABLE)。其中,读提交是DM 数据库默认使用的事务隔离级别,可重复读升级为更严格的串行化隔离级。

image.png
点击这里查看视频讲解:【赵渝强老师】达梦数据库的事务隔离级别

在达梦数据库中要查看默认的事务隔离级别,可以通过下面的方式来获取。
(1)使用管理员登录数据库。

SQL> conn sysdba/Welcome_1

(2)执行下面的语句获取事务的隔离级别。

SQL> select para_name,para_value,
	case para_value
		when 1 then 'Read Commited'
		when 3 then 'Serializable'
		else 'None'
	end as "隔离级别"
    from v$dm_ini where para_name='ISOLATION_LEVEL';

# 输出的信息如下:
行号     PARA_NAME       PARA_VALUE 	隔离级别 
------ --------------- ---------- -------------
1       ISOLATION_LEVEL 	1          	Read Commited

# 从输出的信息可以看出,DM数据库默认的事务隔离级别是读已提交(READ-COMMITTED)。

数据库在不同的事务隔离级别下会有不同的行为,从而在并发访问数据的时候会带来不同的问题。下表列举了在不同的SQL标准事务隔离级别下,数据库可能存在的不同问题。

3

由于达梦数据库默认的事务隔离级别是读已提交(READ-COMMITTED),因此在达梦数据库中默认是不存在脏读问题的。

posted @ 2025-12-19 16:15  赵渝强老师  阅读(0)  评论(0)    收藏  举报