SQL Server事务隔离级别和Oracle中的区别

数据库 SQL Server
SQL Server数据库中,提供了四种SQL Server事务隔离级别,那么SQL数据库的事务隔离级别和Oracle中的事务隔离级别究竟有何不同呢?下文将带您寻找出答案。

SQL Server事务隔离级别和Oracle中的事务隔离级别有所不同,在了解二者的区别之前,先让我们来了解一下事务隔离级别都有哪些。

在SQL92标准中,事务隔离级别分为四种,分别为:

Read Uncommitted
Read Committed
Read Repeatable
Serializable

其中Read Uncommitted与Read Committed为语句级别的,而Read Repeatable与Serializable是针对事务级别的。
在Oracle和SQL Server中设置事务隔离级别的语句是相同的,都使用SQL92标准语法,即:
Set Transaction Isolation Level Read Committed
上面示例中的Read Committed可以被替换为其他三种隔离级别中的任意一种。

1)SQL Server中的隔离级别及实现机制

在SQL Server中提供了所有这四种隔离级别。
下面我们讨论在SQL Server中,这几种隔离级别的含义及其实现方式。

Read Uncommitted:一个会话可以读取其他SQL Server事务未提交的更新结果,如果这个事务***以回滚结束,这时的读取结果就可能是错误的,所以多数的数据库应用都不会使用这种隔离级别。

Read Committed:这是SQL Server的缺省隔离级别,设置为这种隔离级别的事务只能读取其他SQL Server事务已经提交的更新结果,否则,发生等待,但是其他会话可以修改这个事务中被读取的记 录,而不必等待事务结束,显然,在这种隔离级别下,一个事务中的两个相同的读取操作,其结果可能不同。

Read Repeatable:在一个SQL Server事务中,如果在两次相同条件的读取操作之间没有添加记录的操作,也没有其他更新操作导致在这个查询条件下记录数增多,则两次 读取结果相同。换句话说,就是在一个事务中***次读取的记录保证不会在这个事务期间发生改变。SQL Server是通过在整个事务期间给读取的记录加锁实现这种隔离级别的,这样,在这个事务结束前,其他会话不能修改事务中读取的记录,而只能等待事务结 束,但是SQL Server不会阻碍其他会话向表中添加记录,也不阻碍其他会话修改其他记录。

Serializable:在一个SQL Server事务中,读 取操作的结果是在这个事务开始之前其他事务就已经提交的记录,SQL Server通过在整个事务期间给表加锁实现这种隔离级别。在这种隔离级别下,对这个表的所有DML操作都是不允许的,即要等待事务结束,这样就保证了在 一个事务中的两次读取操作的结果肯定是相同的。

2)Oracle中的隔离级别及实现机制

在 Oracle中,没有Read Uncommitted及Repeatable Read隔离级别,这样在Oracle中不允许一个会话读取其他事务未提交的数据修改结果,从而避免了由于事务回滚发生的读取错误。Oracle中的 Read Committed和Serializable级别,其含义与SQL Server类似,但是实现方式却大不一样。

在Oracle 中,存在所谓的回滚段(Oracle9i之前版本)或撤销段(Oracle9i版本),Oracle在修改数据记录时,会把这些记录被修改之前的结果存入 回滚段或撤销段中,就是因为这种机制,Oracle对于事务隔离级别的实现与SQL Server截然不同。在Oracle中,读取操作不会阻碍更新操作,更新操作也不会阻碍读取操作,这样在Oracle中的各种隔离级别下,读取操作都不 会等待更新事务结束,更新操作也不会因为另一个事务中的读取操作而发生等待,这也是Oracle事务处理的一个优势所在。

Oracle缺省的 设置是Read Committed隔离级别(也称为语句级别的隔离),在这种隔离级别下,如果一个事务正在对某个表进行DML操作,而这时另外一个会话对这个表的记录进 行读取操作,则Oracle会去读取回滚段或撤销段中存放的更新之前的记录,而不会象SQL Server一样等待更新事务的结束。

在Serializable隔离级别(也称为事务级别的隔离),事务中的读取操作只能读取这个事务开始之前已经提交的数据结果。如果在读取时,其他事务正在 对记录进行修改,则Oracle就会在回滚段或撤销段中去寻找对应的原来未经更改的记录(而且是在读取操作所在的事务开始之前存放于回滚段或撤销段的记 录),这时读取操作也不会因为相应记录被更新而等待。

 

 

 

 

【编辑推荐】

带您深入了解SQL Server事务

SQL Server定时作业的设置方法

SQL Server连接错误的解决方法

25条mysql和sql server区别

SQL Server自增字段的方法

责任编辑:段燃 来源: 互联网
相关推荐

2010-11-19 16:13:06

oracle事务隔离级

2010-10-19 13:40:30

SQL Server事

2022-10-09 20:52:19

事务隔离级别传播机制

2018-12-19 16:46:38

MySQL事务隔离数据库

2009-06-29 17:54:47

Spring事务隔离

2021-07-26 10:28:13

MySQL事务隔离

2024-04-26 09:17:20

MySQL事务隔离

2021-08-04 13:19:42

MySQL 事务隔离

2020-09-21 18:44:35

MySQL

2023-10-11 08:09:53

事务隔离级别

2021-01-18 11:49:26

面试事务隔离

2024-12-02 08:37:04

2022-09-13 13:49:05

数据库隔离

2020-10-13 10:32:24

MySQL事务MVCC

2022-08-11 07:55:05

数据库Mysql

2023-10-13 07:54:49

数据库MySQL

2021-10-19 10:10:51

MySQL事务隔离级别数据库

2022-09-19 06:16:23

事务隔离级别Spring

2019-08-05 09:19:45

PG事务隔离级别数据库

2018-07-17 10:58:45

数据库数据库事务隔离级别
点赞
收藏

51CTO技术栈公众号