架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5170|回复: 0

[资料] SQL Server 设置事务隔离级别

[复制链接]
发表于 2021-2-5 11:53:34 | 显示全部楼层 |阅读模式
Entity Framework 查询优化之 WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

数据库锁 NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
SQL Server 中事务的隔离级别以及与脏读,不可重复读,幻读等关系(代码论证和时间序)

了解了在并发访问数据库的情况下可能会出现这些问题,就可以继续了解数据库隔离级别这样的一个概念,通俗一点讲就是:你希望通过何种方式让并发的事务隔离开来,隔离到什么程度?比如可以容忍脏读,或者不希望并发的事务出现脏读的情况,那么这些可以通过隔离级别的设置使得并发事务之间的隔离程度变得宽松或者很严峻。

隔离级别越高,读取脏数据或者造成数据不统一不完整的机会就越少,但是在高并发的系统中,性能降低就越严重。隔离级别越低,并发系统中性能上提升很大,但是数据本身可能不完整。

在 SQL Server 2012 中可以通过这样的语法来设置事务的隔离级别 (从低到高排列):

SET TRANSACTION ISOLATION LEVEL
    { READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ
    | SNAPSHOT
    | SERIALIZABLE
    }
[ ; ]
首先,新建一个测试脚本,创建数据库和插入测试数据,如下:

QQ截图20210205114556.jpg

新建一个窗口A,开启一个事务,执行更新操作,并等待10秒后提交,代码如下:

新建一个窗口B,设置事务 READ UNCOMMITTED  (未提交读,离级别最低,容易产生的问题就是脏读,因为可以读取其它事务修改了的但是没有提交的数据。它的作用跟在事务中 SELECT 语句对象表上设置 (NOLOCK) 相同。) 查询数据,代码如下:

新建一个窗口C,直接查询数据,如下:

依次,执行 A、B、C 窗口,发现在更新数据的时候,B 窗口可以立马返回数据(读取的有可能是脏数据),C 窗口需要等待 A 窗口执行完成,才会返回数据,如下图:

QQ截图20210205115153.jpg
(窗口B)

QQ截图20210205115232.jpg
(窗口C)

(完)





上一篇:Redis 持久化 RDB 和 AOF 的区别
下一篇:MySQL 将查询结果导出到文件
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-20 21:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表