位置: 编程技术 - 正文

深入分析MSSQL数据库中事务隔离级别和锁机制(ms-sql-s)

编辑:rootadmin

推荐整理分享深入分析MSSQL数据库中事务隔离级别和锁机制(ms-sql-s),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:ms-sql-s,msql数据库,msql数据库,sql数据分析思路,sql数据分析思路,mssql 数据类型,mssql go,mssql 数据类型,内容如对您有帮助,希望把文章链接给更多的朋友!

锁机制NOLOCK和READPAST的区别。

1. 开启一个事务执行插入数据的操作。

2. 执行一条查询语句。

结果中显示”a”和”a”。当1中事务回滚后,那么a将成为脏数据。(注:1中的事务未提交) 。NOLOCK表明没有对数据表添加共享锁以阻止其它事务对数据表数据的修改。

这条语句将一直死锁,直到排他锁解除或者锁超时为止。(注:设置锁超时SET LOCK_TIMEOUT )

这条语句将显示a未提交前的状态,但不锁定整个表。这个提示指明数据库引擎返回结果时忽略加锁的行或数据页。

3. 执行一条插入语句。

这个时候,即使步骤1的事务回滚,那么a这条数据将丢失,而b继续插入数据库中。

NOLOCK

1. 执行如下语句。

注:NOLOCK不加任何锁,可以增删查改而不锁定。

ROWLOCK

1. 执行一条带行锁的查询语句。

注:在删除和更新正在查询的数据时,会锁定数据。对其他未查询的行和增加,查询数据无影响。

HOLDLOCK,TABLOCK和TABLOCKX

1. 执行HOLDLOCK

注:其他事务可以读取表,但不能更新删除

update Customer set Title='aa' —要等待秒中。

SELECT * FROM Customer —不需要等待

2. 执行TABLOCKX

注:其他事务不能读取表,更新和删除

update Customer set Title='aa' —要等待秒中。

SELECT * FROM Customer —要等待秒中。

3. 执行TABLOCK

注:其他事务可以读取表,但不能更新删除

update Customer set Title='aa' —要等待秒中。

SELECT * FROM Customer —不需要等待

UDPLOCK

1. 在A连接中执行。

2. 在其他连接中执行。

update Customer set Title='aa' where ID=1—要等秒

SELECT * FROM Customer ?不用等

深入分析MSSQL数据库中事务隔离级别和锁机制(ms-sql-s)

insert into Customer select 'a','b'?不用等

注:对于UDPLOCK锁,只对更新数据锁定。

注:使用这些选项将使系统忽略原先在SET语句设定的事务隔离级别(SET Transaction Isolation Level)。

事务隔离级别

脏读:READ UNCOMMITTED

脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。

1. 在A连接中执行。

2. 在B连接中执行。

这个时候,未提交的数据会''会显示出来,当A事务回滚时就导致了脏数据。相当于(NOLOCK)

提交读:READ COMMITTED

1. 在A连接中执行。

2. 在B连接中执行。

这个时候,未提交的数据会''不会显示出来,当A事务提交以后B中才能读取到数据。避免了脏读。

不可重复读:REPEATABLE READ

不可重复读是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

例如:

1. 在A连接中执行如下语句。

2. 在B连接中执行如下语句,而且要在第一个事物的三十秒等待内。

UPDATE Customer SET Title='d' WHERE ID=

这个时候,此连接将锁住不能执行,一直等到A连接结束为止。而且A连接中两次读取到的数据相同,不受B连接干扰。

注,对于Read Committed和Read UnCommitted情况下,B连接不会锁住,等到A连接执行完以后,两条查询语句结果不同,即第二条查询的Title变成了d。

序列化读:SERIALIZABLE

1. 在A连接中执行。

2. 在B连接中执行,并且要在A执行后的秒内。

在A连接的事务提交之前,B连接无法插入数据到表中,这就避免了幻觉读。

注:幻觉读是指当事务不是独立执行时发生的一种现象,例如 第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好像发生了幻觉一样。

共享锁

共享锁(S 锁)允许并发事务在封闭式并发控制(请参阅并发控制的类型)下读取 (SELECT) 资源。资源上存在共享锁(S 锁)时,任何其他事务都不能修改数据。读取操作一完成,就立即释放资源上的共享锁(S 锁),除非将事务隔离级别设置为可重复读或更高级别,或者在事务持续时间内用锁定提示保留共享锁(S 锁)。

更新锁

更新锁(U 锁)可以防止常见的死锁。在可重复读或可序列化事务中,此事务读取数据 [获取资源(页或行)的共享锁(S 锁)],然后修改数据 [此操作要求锁转换为排他锁(X 锁)]。如果两个事务获得了资源上的共享模式锁,然后试图同时更新数据,则一个事务尝试将锁转换为排他锁(X 锁)。共享模式到排他锁的转换必须等待一段时间,因为一个事务的排他锁与其他事务的共享模式锁不兼容;发生锁等待。第二个事务试图获取排他锁(X 锁)以进行更新。由于两个事务都要转换为排他锁(X 锁),并且每个事务都等待另一个事务释放共享模式锁,因此发生死锁。

若要避免这种潜在的死锁问题,请使用更新锁(U 锁)。一次只有一个事务可以获得资源的更新锁(U 锁)。如果事务修改资源,则更新锁(U 锁)转换为排他锁(X 锁)。

排他锁

排他锁(X 锁)可以防止并发事务对资源进行访问。使用排他锁(X 锁)时,任何其他事务都无法修改数据;仅在使用 NOLOCK 提示或未提交读隔离级别时才会进行读取操作。

数据修改语句(如 INSERT、UPDATE 和 DELETE)合并了修改和读取操作。语句在执行所需的修改操作之前首先执行读取操作以获取数据。因此,数据修改语句通常请求共享锁和排他锁。例如,UPDATE 语句可能根据与一个表的联接修改另一个表中的行。在此情况下,除了请求更新行上的排他锁之外,UPDATE 语句还将请求在联接表中读取的行上的共享锁。

SQL优化技巧指南 对查询进行优化,要尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。应尽量避免在where子句中对字段进行null值判断,否则将导致引

人工智能自动sql优化工具--SQLTuning for SQL Server 针对这种情况,人工智能自动SQL优化工具应运而生。现在我就向大家介绍这样一款工具:SQLTuningforSQLServer。1.SQLTuning简介SQLTurning是Quest公司出品的QuestCentra

使用 TOP 子句限制UPDATE 语句更新的数据 可以使用TOP子句来限制UPDATE语句中修改的行数。当TOP(n)子句与UPDATE一起使用时,将针对随机选择的n行执行删除操作。例如,假设您要为一位高级销售人

标签: ms-sql-s

本文链接地址:https://www.jiuchutong.com/biancheng/319015.html 转载请保留说明!

上一篇:浅析SQL Server中包含事务的存储过程(sql server干嘛的)

下一篇:SQL优化技巧指南(sql优化口诀)

  • 新公司需要去当地街道报备劳动关系证明吗
  • 增值税几个点怎么算
  • 印花税可以申报以前年度吗
  • 资本公积什么情况下转增资本
  • 公司给员工租赁住房算成本吗
  • 废旧物资增值税税收优惠政策
  • 施工企业必须要注册造价工程师吗
  • 固定资产的净收益和净损失怎么计算
  • 现金折扣退回会计分录
  • 营改增试点纳税人提供有形动产租赁服务,税率为
  • 金税三期中个税怎么算
  • 买的厨房用品算什么费用
  • 可供出售债权投资
  • 工程发票是不是都要异地预缴
  • 高新研发费的账务处理怎么做?
  • 维修服务费税率是多少?
  • 应收账款挂账要开票吗
  • 企业银行基本户
  • 从租计征房产税租金收入含税吗
  • 应收和预收可以抵消吗
  • 免征附加税费
  • 公司减少注册资本时,应当自作出减少
  • 会计变更
  • php session_start
  • 赠品没有收到
  • 保险公司报销工伤手续需要哪些手续
  • 应付税款法账务处理
  • 出口退税退回的税款怎么记账
  • 留底的进项税额记哪儿?
  • 公司水费怎么算
  • php的脚本语言
  • php静态页面实现搜索功能
  • thinkphp域名路由
  • 注册教育培训机构需要哪些手续
  • 公司员工的车加油可以开公司发票吗
  • 针对多用户实现什么功能
  • 商业折扣的会计分录
  • 应收利息可以计入其他应收款吗
  • 纸质增值税专用发票申领
  • 个税少扣了怎么账平掉
  • java初学者教程
  • 不是公司员工差旅费可以入差旅费吗
  • 出差期间发生的招待费计入什么科目
  • 支付对价的公允价值的处理
  • 经营租入的设备属于什么会计要素
  • 本年度的进项可以结转到下一年度吗
  • 长期股权投资会计准则2021修订
  • 待处理流动资产损失属于什么科目
  • 饭馆增值税
  • 公司买车抵税最新政策2022购置税减半享受不?
  • 违约金 专票
  • 应交税费进项税额转出期末怎么结转
  • 金蝶固定资产管理
  • 收到土地使用权计入什么科目
  • 注册资金一般是多少
  • 实收资本没到账缴纳印花税吗
  • 什么发票可以抵扣税
  • 应交增值税贷方余额表示什么
  • 总结下半年工作计划
  • mssqlserveradhelper
  • win10预览版21390
  • CentOS ip_conntrack: table full, dropping packet 的解决方法
  • 重装系统的简写
  • mac图形界面
  • linux-c
  • NPFMSG.exe - NPFMSG是什么进程 有什么用
  • win8屏幕分辨率显示不全
  • ERROR 1045: Access denied for user: root@localhost (Using password: NO)
  • win7开机无信号之后黑屏
  • win10系统百度网盘链接
  • jquery密码验证
  • python函数例子
  • JavaScript中的数据类型
  • android 图片裁剪 任意形状
  • android 打包
  • 电子税务局房产税税源信息采集
  • 浙江网上税务局登录官网
  • 税务文书送达回证模板
  • 税务局要求补上年房租开票
  • 河南省单位怎么打印社保花名册
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设