当前位置: 首页 > 编程笔记 >

SQL Server的事务操作隔离模式介绍

张德佑
2023-03-14
本文向大家介绍SQL Server的事务操作隔离模式介绍,包括了SQL Server的事务操作隔离模式介绍的使用技巧和注意事项,需要的朋友参考一下

一般而言,最好让SQL Server以默认形式在隔离事务操作;毕竟,隔离是ACID模型的基本原则之一。但是,有时候因为业务需求的原因,数据库管理员不得不违背默认行为,而 是采取更灵活一点的方法来进行事务操作隔离。针对数据库管理员遇到的这类情况,SQL Serve提供了五种不同的事务操作隔离模式。在详细介绍这些事务操作隔离模式之前,必需先了管理员会遇到的数据库问题:

  1.脏数据读写,这种情况发生在当一个事务读写由另一个事务修改而未提交的数据的时候。如果另一个事物永远都不提交其修改数据,那么第一个事务就永远都得到一个无效的值,即脏数据。

  2.不可重复读写,这种情况发生在当一个事务在试图重复读取同一数据,而另一个事务在这第一个事务重复读取之前修改了此数据的时候。这样会使第一个事务在读取同一数据时获得两个不同的值,导致原始数据读取变成不可重复。

  3.影象读写,这种情况发生在当一个事务在某一个表格中进行多次数据查询,而另一个事务插入或者删除满足查询条件的数据行。这会造成前一个事务获得或失去一个“影象”值。

  SQL Server的每一种隔离模式都试图解决以上问题中的部分,使数据库管理员能够保持事务操作隔离和业务需求之间的平衡。以下是SQL Server的五种隔离模式:

  1.读写提交隔离模式,这是SQL Server默认的隔离模式,数据库不允许事务操作读写由未提交的事务操作写的数据。这个模式可以防止产生脏数据读写,但是不能防止影象读写或不可重复读写的情况。

  2.读写未提交隔离模式,这种模式基本在事务操作之间没有进行隔离。任何事务都可以读写由另一个未提交的事务写的数据。这种模式下,事务操作很容易出现脏数据读写、影象读写和不可重复读写的情况。

  3.可重复读写隔离模式,比读写提交隔离模式更进一步,能够阻止事务修改正被另一个事务读写的数据,直到读写操作结束。这个隔离模式可以防止脏数据读写和不可重复读写的情况发生。

  4.串行化隔离模式,这个模式运用范围锁防止一个事务在另一个事务对数据进行读取时插入或者删除数据行。串行化隔离模式能够防止上述三种情况的发生。

  5.快照隔离模式,这个模式同样可以防止三种情况的发生,只是方法不同。它为每一个事务提供其查询数据的“快照”,事务可以查询快照,无需返回到源数据表格,从而防止产生脏数据读取。

  如果想要改变SQL Server使用的隔离模式,只需要输入以下命令:

  

SET TRANSACTION ISOLATION LEVEL

  可以用以下关键词代替:

  · READ COMMITTED

  · READ UNCOMMITTED

  · REPEATABLE READ

  · SERIALIZABLE

  · SNAPSHOT

  这些都是基本的SQL Server事务隔离模式。

 类似资料:
  • MSDN 描述其 OLEDB 提供程序的 JET 事务隔离,如下所示: Jet支持事务中的五级嵌套。事务唯一支持的模式是提交读取。设置较低级别的事务分离意味着提交读取。设置更高的级别将导致StartTransaction失败。 Jet仅支持单相提交。 MSDN对的描述如下: 指定读取数据时保持共享锁,以避免脏读,但可以在事务结束前更改数据,从而导致不可重复读取或幻像数据。此选项是SQL服务器默认值

  • 我正在尝试用Connector/J和MySql构建一个Java(JDK1.8)应用程序。有人告诉我,Serializable是最高级别,但它会影响性能,所以Serializable并不常用。 但是考虑一下这种情况: 有两个提交将更新同一行的字段(提交A和提交B)。如果A和B同时发生,并且隔离级别不可序列化,则会出现数据竞争,这会导致字段不一致。但在可序列化级别,这两个更新不会同时发生,因此A发生在

  • 本文向大家介绍说一下 spring 的事务隔离?相关面试题,主要包含被问及说一下 spring 的事务隔离?时的应答技巧和注意事项,需要的朋友参考一下 spring 有五大隔离级别,默认值为 ISOLATION_DEFAULT(使用数据库的设置),其他四个隔离级别和数据库的隔离级别一致: ISOLATION_DEFAULT:用底层数据库的设置隔离级别,数据库设置的是什么我就用什么; ISOLATI

  • 本文向大家介绍Spring事务隔离级别简介及实例解析,包括了Spring事务隔离级别简介及实例解析的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是Spring事务隔离级别(solation level)介绍及例子,具体如下。 当两个事务对同一个数据库的记录进行操作时,那么,他们之间的影响是怎么样的呢?这就出现了事务隔离级别的概念。数据库的隔离性与并发控制有很大关系。数据库的隔离级别是数据

  • 问题内容: 也许我在这里想解释的没有任何意义,所以我想提前道歉。无论如何,我会尽力的。 我试图读取文件,执行一些数据库操作,然后将内容移动到另一个文件。我想知道是否有可能在Java中以原子方式执行所有这些操作,因此,如果操作列表中有任何错误,请回滚完整序列并返回到起点。 在此先感谢您的帮助。 问题答案: 看一下Apache Commons Transaction 。它具有事务性管理文件的功能。 一

  • 本文向大家介绍事务的隔离级别有哪些?相关面试题,主要包含被问及事务的隔离级别有哪些?时的应答技巧和注意事项,需要的朋友参考一下 SQL 标准定义了四个隔离级别: READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。 READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重