SQLServer 数据库之锁

这篇具有很好参考价值的文章主要介绍了SQLServer 数据库之锁。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 概述

SQL Server 数据库支持多个用户同时访问数据库,但当用户同时访问数据库时,就会造成并发问题,锁的机制能很好地解决这个问题,保证数据的完整性和一致性;
SQL Server 自带锁机制,若是简单的数据库访问机制,完全能满足用户的需求;但对于数据完全与数据完整性有特殊要求,就必须自动控制锁机制解决;

2. SQL Server 锁机制

锁是处理 SQL Server 中并发问题的最有效手段,当多个事务访问同一数据时,能很好地保证数据的完整性和一致性;
在很多数据库系统中(如DB2、MySQL、Oracle)都有锁机制,其规则也大同小异;
在 SQL Server 中采用系统来管理锁,SQL Server 中采用的是动态加锁的机制;
SQL Server 中有一套默认的锁机制,若用户在使用数据库的过程中不设置任何锁,系统将自动对锁管理;

3. 锁模式

在 SQL Server 中有不同的锁,在各种锁的类型中有些是能相互兼容的,锁的类型决定了并发发生时数据资源的范文模式,在 SQL Server 中常用的锁以下 5 种;

  1. 更新锁:一般使用于可更新数据,能防止并发访问中的脏读情况以及在数据更新时可能会出现的死锁情况,更新锁一般会在对数据进行查询更新时使用;若事务修改资源,更新锁会转换为排他锁,否则会转换为共享锁;在 SQL Server 中,当一个事务访问资源时获得更新锁,其他事务能够对资源进行访问,但不允许排他式访问;
  2. 排他锁:在事务对资源进行数据更改操作(如 INSERT、UPDATE、DELETE)时使用;排他锁能保证同一数据不会被多个事务同时进行更改操作;
  3. 共享锁:共享锁允许多个事务同时访问同一资源,但不允许其他事务修改当前事务所使用的数据;
  4. 键范围锁:能防止幻读,通过保护行之间键的范围还能防止对事务访问的记录集进行幻读插入或删除;
  5. 架构锁:数据库引擎在表数据定义语言(DDL)操作(如添加列或删除表)的过程中使用架构修改锁;保持该锁期间,架构锁将阻止对表进行并发访问;即架构锁在释放前将阻止所有外围操作;

4. 锁的粒度

Microsoft SQL Server 数据库引擎具有多粒度锁定,允许一个事务锁定不同类型的资源;
为了减少锁定的开销,数据库引擎自动将资源锁定在适合任务的级别;锁定在较小的粒度(如行)能提高并发度,但开销较高,因为若锁定了许多行,就需要持有更多的锁;
锁定在加大的粒度(如表)会降低并发,因为锁定整个表限制了其他事务对表中任意部分的访问;但其开销较低,因为需要维护的锁较少;
sqlserver 锁,SQL server,sqlserver,microsoft,数据库,锁
数据库引擎通常必须获取多粒度级别上才能完整地保护资源,多粒度级别上的所称为层次结构;

4. 查看锁

在 SQL Server数据库中,能通过查看 sys.dm_tran_locks 返回 SQL Server 数据库中有关当前活动的锁的管理的信息;
向锁管理器发出的已授予锁或正等待授予锁的每个当前活动请求分别对应一行;结果集中的列大体分为两组:资源组和请求组;

5. 死锁

在两个或多个任务中,若每一个任务都锁定了其他的资源,就会造成永久的阻塞,这种情况就是死锁;
sqlserver 锁,SQL server,sqlserver,microsoft,数据库,锁

形成死锁有以下 4 个必要条件:

  • 互斥条件:资源不能被共享,只能被一个进程施使用;
  • 请求与保持条件:已获得资源的进程能同时申请其他资源;
  • 非剥夺条件:已分配的资源不能从该进程中被剥夺;
  • 循环等待条件:多个进程构成环路,且每个进程都在等待相邻进程正在使用的资源;

在一个复杂的数据库系统中很难百分之百地避免死锁,但能按照以下的访问策略减少死锁的发生;

  1. 所有事务中以相同的次序使用资源;避免出现循环;
  2. 减少事务持有资源的时间,避免事务中的用户交互;
  3. 让事务保持在一个批处理中;
  4. 由于锁的隔离级别越高共享锁的时间就越长,因此能降低隔离级别来达到减少竞争的目的;
  5. 使用绑定连接;

注意: SQL Server 数据库引擎自动检测 SQL Server 中的死锁循环;数据库引擎选择一个会话作为死锁的牺牲品,然后终止当前事务(出现错误)来打断死锁;文章来源地址https://www.toymoban.com/news/detail-539612.html

到了这里,关于SQLServer 数据库之锁的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Sql】win11系统安装sqlserver2008r2数据库,找不到文件user.config line 5

    【问题描述】 在win11系统环境下, 安装sql server 2008 r2数据库的时候,提示【Microsoft.NET Framework】窗口错误。 如果点击继续,应用程序将忽略此错误并尝试继续。 具体错误明细: 创建userSettings/Microsoft.SqlServer.Configuration.LandingPageProperties.Settings的配置节处理过程是出错; 未能加

    2024年02月11日
    浏览(61)
  • idea连接Sqlserver数据库报错:驱动程序无法使用安全套接字层(SSL)加密建立到SQL

    com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用安全套接字层(SSL)加密建立到SQL Server的安全连接。错误:“客户端首选项[TLS12]不接受服务器选择的协议版本TLS10”。 使用idea连接Sqlserver数据库,然后想用MybatisX插件生产代码 1、建立连接 填写数据库信息 测试连接报错

    2024年02月07日
    浏览(71)
  • 【SQLServer】sqlserver数据库导入oracle

    将sqlserver数据库导入到oracle 实用工具: SQL Server Management Studio 15.0.18424.0 SQL Server 管理对象 (SMO) 16.100.47021.0+7eef34a564af48c5b0cf0d617a65fd77f06c3eb1 Microsoft Analysis Services 客户端工具 15.0.19750.0 Microsoft 数据访问组件 (MDAC) 10.0.19041.2486 Microsoft MSXML 3.0 4.0 6.0 Microsoft .NET Framework 4.0.30319.42000 操

    2024年02月09日
    浏览(58)
  • 数据库实训sqlserver

    一、数据库设计题 1、以“library”为名称创建一个数据库。该数据库中包含一个主数据文件tsdata.mdf,存放路径为“d:data”;一个事务日志文件tslog.ldf,存放路径为“d:data”。其他设置自定。  2、在上题创建好的数据库中,按如下要求创建三张表。 表1 书籍表:用来存储书

    2024年02月09日
    浏览(47)
  • sqlserver数据库错误码

    错误 严重性 是否记录事件 说明 -2 超时时间已到。 超时时间在操作完成或服务器没有响应之前已过。 (Microsoft SQL Server,错误: -2)。 -1 在建立与服务器的连接时出错。 连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接,这可能会导致此失败。 (提供程序:

    2024年02月05日
    浏览(123)
  • SqlServer 快速数据库脚本迁移

    做工业的,经常遇到内网的项目,就是数据往本地的数据库传。由于这个问题所以我们需要新建一个数据库。最合适的就是数据库脚本迁移。 高级 操作完成 生成模板数据库 生成表结构 生成表数据(因为有些配置数据是写在数据库里面的) 导出模板数据库脚本 生成的脚本语

    2024年02月12日
    浏览(45)
  • Kettle连接SQLSERVER数据库

    下载驱动程序 微软官网下载 Microsoft SQL Server JDBC 驱动程序:https://www.microsoft.com/zh-cn/download/details.aspx?displaylang=enid=11774e6b34bbe-475b-1abd-2c51-b5034bcdd6d2=truea03ffa40-ca8b-4f73-0358-c191d75a7468=true44F86079-8679-400C-BFF2-9CA5F2BCBDFC=1 双击下载的软件进行解压,找到jre8文件夹底下的sqljdbc42.jar文件,

    2024年02月11日
    浏览(74)
  • 如何远程连接SQLServer数据库

    1.打开  选中如下的连接方式  连接成功后就会出出现 2.连接成功后:右键设置属性 安全性设置:如下图所示 设置连接属性:     设置完成之后点击完成!!! 3.打开  启动sqlServer服务,必须启动!!  按照如下进行启动,右键即可启动!  设置本机的ip地址,ipconfig查看本

    2024年02月09日
    浏览(47)
  • SQLServer数据库备份与还原

            Microsoft SQL Server Management Studio,顾名思义,是微软 SQL Server的管理工具,说白了,就是微软官方管理自家数据库的软件。可以对数据库和表操作,本章我们用到它强悍的备份和还原功能。       (1)  选中需要备份的数据库,右键选择备份   (2)添加目标 (3)此

    2024年02月13日
    浏览(47)
  • Python连接SQLserver数据库

    前进四的状态出发! 学习Python 连接 数据库 解决问题: 1:如何连接数据库 2:如何进行简单查询 3:如何将查询中的中文乱码给修复 4:如何进行插入,更新,删除 主要在pymssql.connect 中添加charset = ‘cp936’ 原因:因为字符串字段类型为:varchar,造成读取数据乱码。 方法一的缺点: 如果

    2024年02月02日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包