位置: 编程技术 - 正文

SQL Server学习笔记之事务、锁定、阻塞、死锁用法详解(sql server入门新手教程)

编辑:rootadmin

推荐整理分享SQL Server学习笔记之事务、锁定、阻塞、死锁用法详解(sql server入门新手教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:sqlserver学习资料,sql server实用教程,sql server教学视频,sqlserver学习资料,sqlserver学习资料,sql server实用教程,sqlserver学习资料,sql server教学视频,内容如对您有帮助,希望把文章链接给更多的朋友!

本文实例讲述了SQL Server学习笔记之事务、锁定、阻塞、死锁用法。分享给大家供大家参考,具体如下:

1、事务

隐式事务

在会话1中执行commit来提交事务,那么会话2马上就会返回记录了。

现在把两个会话的执行顺序调换一下:

显示数据库最早的活动事务

通过会话来查询事务信息

2、锁定

当一个用户要读取另一个用户正在修改的数据,或者一个用户正在修改另一个用户正在读取的数据,或者一个用户要修改另一个用户正在修改的数据,就会出现并发问题。锁定能防止并发问题。

资源的锁定方式称为锁定模式,SQL Server中的锁定模式:共享锁,意向锁,更新锁,排他锁,架构稳定锁,架构修改锁,大批量更新锁,键范围锁。不是所有锁模式都是兼容的,如:一个加了排他锁的资源不能再加其他锁,其他事务必须等待,直到释放排他锁。

可以锁定SQL Server中的各类对象,可以锁定的资源在粒度上差异很大,从细粒度(行、键)到粗粒度(数据库)。细粒度的锁允许用户能查询那些未被锁定的行,并发性更高,但是需要更多的锁资源(每个被锁定的行都需要一个锁资源);粗粒度的锁降低了并发性,但需要的锁资源很少。

在SQL Server中可锁定的资源:

查看锁的活动

控制表的锁升级

每个锁都会消耗内存资源,当锁的数量增加时,那么所需要的内存就会增加,而系统内可用的内存就会减少。如果锁占用的内存比率超过一个阀值,SQL Server会将细粒度锁(行锁)升级为粗粒度锁(表锁),这个过程就是锁升级。

锁升级的优点是可以减少锁的数量,相应的减少内存的使用量,而缺点是由于锁住了更大的资源,所以会导致阻塞,降低并发性。

影响锁定的除了上面提到的锁定模式、锁的粒度,还有就是事务的隔离级别。

SQL Server学习笔记之事务、锁定、阻塞、死锁用法详解(sql server入门新手教程)

所谓隔离级别其实就是事务与事务之间相互影响的程度,比如,一个事务修改了数据,那么其他事务是否能看到这些修改的数据,无论事务是否提交。对于最高的隔离级别,这个事务所做的修改,其他任何事务都看不到;而最低的隔离级别,这个事务所做的修改,可以被其他任何事务看到。

SQL Server隔离级别:

1.read uncommitted能解决丢失更新的问题,但是会导致脏读。

2.read committed读取的是已提交的数据,所以解决了脏读的问题,但是会有不可重复读取的问题,也就是在一个事务中有两次读取,第一次读取的和第二次读取的同一条数据,可能值是不同的,因为在事务中的select语句在读取完之后就立即释放的共享锁,而此时有另一个事务把刚才第一个事务读取的那条数据修改了,这样第一次读和第二次读到的值就会不同。

3.repeatable read解决了不可重复读取的问题,也就是在一个事务中的前后两次读取,读取到的数据值是一样的,但是会有幻读的可能,也就是第一次读出的数据确实和第二次读取的数据一样,但是第二次读取的记录条数可能多于第一次读取的记录条数,因为在读取的时候确实是锁住了被读取的记录,但是这个表可能添加了新的记录。

4.serializable通过锁住查询范围内的键、键与键之间的范围来解决幻读的问题,比如where id >=5 and id <=,加入表表中只有id为7,9的两条记录,那么5-6、7-8、9-这3个范围都会被锁住。

5.在ALLOW_SNAPSHOT_ISOLATION下的snapshot这种隔离级别允许读取事务一致性版本的数据,但可能不是最新的版本,也就是说在一个事务中只能读到某个版本,比如,在一个事务中有两次读取,第一次读完后,数据被另一个事务修改且事务提交了,此时进行第2次读取,那么读出来的还是和第一次读取一样的数据,这就是在一个事务中如果数据被其他事务修改了,读出来的数据也一样。优点是数据读取不会阻塞写,写也不会阻塞读取。另外,如果两个事务同时修改同一行数据,会导致更新冲突错误。

6.在READ_COMMITTED_SNAPSHOT下的read committed隔离级别允许在同一事务中总是能读取运行的已提交的数据,而且数据读取不会阻塞写,写也不会阻塞读取,也不会导致更新冲突。

上面是关于锁定的概念,那么接下来就是如何找到阻塞的进程,并解决阻塞问题。

3、死锁

当两个事务分别锁定了资源,而又继续请求对方已获取的资源,那么就会产生死锁。

发生死锁的原因:

A、会话以不同的顺序访问表。

B、会话长时间运行事务,在一个事务中更新了很多表或行,这样增加了冲突的可能。

C、会话1申请了一些行锁,会话2申请了一些行锁,之后决定将其升级为表锁。

如果这些行在相同的数据页面中,并且两个会话同时在相同的页面上升级锁粒度,就会产生死锁。

再开启一个会话,开启跟踪:

希望本文所述对大家SQL Server数据库程序设计有所帮助。

SQLServer查询某个时间段购买过商品的所有用户 goods表如下:nametimeproductA-1-::WFEYB-2-:;ASGA-1-::SGHC-4-::HRTC-7-::XCCA-3-::ESFWSELECTDISTINCTOO.nameFROM(SELECTname,DATE_F

Sql Server 使用IP地址登录服务器的配置图文教程 最近在使用NFineBase框架+c#做一个系统的时候,在使用sqlserver连接数据库的时候,遇到几个问题。一.就是在本地或者远程连接别人的数据库的时候,以

SQL查询字段被包含语句 前言说到SQL的模糊查询,最先想到的,应该就是like关键字。当我们需要查询包含某个特定字段的数据时,往往会使用‘%关键字%'查询的方式。例如:SELE

标签: sql server入门新手教程

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

上一篇:分享一个简单的sql注入(分享一个简单的故事英语)

下一篇:SQLServer查询某个时间段购买过商品的所有用户(sql server查询指定内容)

  • 增值税专用发票和普通发票的区别
  • 企业所得税减免所得税额计算公式
  • 耕地占用税税率变化历程
  • 印花税计提怎么计提
  • 对公转账房租怎么备注
  • 买原材料怎么记账
  • 合伙企业可以列入股东吗
  • 银行承兑汇票是什么科目
  • 黄金销售免税
  • 增值税专用发票几个点
  • 出现哪些情形纳入医保
  • 应付账款发生额在哪方
  • 拿到一个材料如何加工
  • 公司注销固定资产怎么处理税怎么交
  • 质量保证金的预留比例是多少
  • 进项票超过180天还可以认证吗
  • 未到期责任准备计入什么科目
  • 营改增对金融服务业税负的影响
  • 抄税忘记了怎么办
  • 增值税税率
  • 小规模纳税人要做固定资产吗
  • 车辆购置税如何做账
  • 房地产企业城市配套费
  • 中介收中介费后就不管了
  • 为什么电脑连上蓝牙耳机却是外放
  • 产负债表的负债项目,显示了企业所负担债务的
  • 如何计算劳务费个人所得税
  • 子公司转为分公司,是不是需要缴纳土地增值税
  • php使用redis缓存技术
  • os x yosemite dp5下载地址 os x 10.10 dp5更新内容
  • linux virt-manager
  • 发票明细与实际不符是什么行为
  • 政府补助财务处理流程
  • 房开企业增值税扣除土地价款包括契税吗
  • 现代服务业进项税加计扣除申报怎么填
  • vue process.env.node_env
  • 发票开具使用要求
  • mkdir命令怎么用
  • 软件开发属于技术合同吗
  • 发行债券支付的费用要减吗
  • 收到的免税苗木发票必须当月抵扣么
  • 物业费税目
  • 确认递延所得税资产时,应估计相关可抵扣
  • 公司过年买的红包封壳怎么做账
  • 企业向个人借款利息如何缴纳增值税
  • 购销合同交印花税吗怎么交
  • 公司开电费发票该怎么入账?
  • 增值税退税流程怎么操作
  • mysql错误提示
  • 银行承兑汇票如果到期了企业没有兑付
  • 软件属于哪种无形资产
  • 未分配利润为负数可以分红吗
  • 已提足折旧的固定资产出售的账务处理
  • 工会经费如何支出
  • 应付账款与实际付款有差异如何分录
  • 公司开出发票但未收到款如何写分录?
  • 补提当年折旧会计分录
  • 经营一家淘宝店需要多少钱
  • 外派国外的员工享受国内法定假期吗
  • 销售产品产生的运输费计入什么科目
  • 收付实现制下主营业务成本怎么算
  • 苹果Mac系统怎么切换输入法
  • cgi linux
  • speedupmypc.exe - speedupmypc是什么进程
  • 电脑防火墙在哪里设置
  • 举例说明linux的主要应用领域
  • 在linux操作系统中,/etc/rc.d/init.d
  • g8a1
  • unity小例子
  • 网页设计中的几种齐方式及其特点
  • insmod: init_module 'hello.ko' failed (Exec format error)
  • unityui
  • [置顶]bilinovel
  • js中截取字符串的方法
  • js实现网页收藏的方法
  • jquery trigger 传参数
  • 云南发票网站
  • todesk点不了
  • 模范劳动者
  • 地税纳税申报表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设