欢迎来到天天文库
浏览记录
ID:37283347
大小:27.08 KB
页数:10页
时间:2019-05-21
《教你快速掌握SQL Server锁的相关概念》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、锁是网络数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性。各种大型数据库所采用的锁的基本理论是一致的,但在具体实现上各有差别。目前,大多数数据库管理系统都或多或少具有自我调节、自我管理的功能,因此很多用户实际上不清楚锁的理论和所用数据库中锁的具体实现。MicrosoftSQLServer(以下简称SQLServer)作为一种中小型数据库管理系统,已经得到了广泛的应用,该系统更强调由系统来管理锁。在用户有SQL请求时,系统分析请求,自动在满足锁定条件和系统性能之间为数据库加上适当的锁,同时系统在运行期间常常自动
2、进行优化处理,实行动态加锁。对于一般的用户而言,通过系统的自动锁定管理机制基本可以满足使用要求,但如果对数据安全、数据库完整性和一致性有特殊要求,就必须自己控制数据库的锁定和解锁,这就需要了解SQLServer的锁机制,掌握数据库锁定方法。锁的模式和兼容性在数据库中加锁时,除了可以对不同的资源加锁,还可以使用不同程度的加锁方式,即锁有多种模式,SQLServer中锁模式包括:1.共享锁SQLServer中,共享锁用于所有的只读数据操作。共享锁是非独占的,允许多个并发事务读取其锁定的资源。默认情况下,数据被读取后,SQLServer立即释
3、放共享锁。例如,执行查询“SELECT*FROMmy_table”时,首先锁定第一页,读取之后,释放对第一页的锁定,然后锁定第二页。这样,就允许在读操作过程中,修改未被锁定的第一页。但是,事务隔离级别连接选项设置和SELECT语句中的锁定设置都可以改变SQLServer的这种默认设置。例如,“SELECT*FROMmy_tableHOLDLOCK”就要求在整个查询过程中,保持对表的锁定,直到查询完成才释放锁定。2.修改锁修改锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。因为使用共享锁时,修改数
4、据的操作分为两步,首先获得一个共享锁,读取数据,然后将共享锁升级为独占锁,然后再执行修改操作。这样如果同时有两个或多个事务同时对一个事务申请了共享锁,在修改数据的时候,这些事务都要将共享锁升级为独占锁。这时,这些事务都不会释放共享锁而是一直等待对方释放,这样就造成了死锁。如果一个数据在修改前直接申请修改锁,在数据修改的时候再升级为独占锁,就可以避免死锁。修改锁与共享锁是兼容的,也就是说一个资源用共享锁锁定后,允许再用修改锁锁定。3.独占锁独占锁是为修改数据而保留的。它所锁定的资源,其他事务不能读取也不能修改。独占锁不能和其他锁兼容。4.
5、结构锁结构锁分为结构修改锁(Sch-M)和结构稳定锁(Sch-S)。执行表定义语言操作时,SQLServer采用Sch-M锁,编译查询时,SQLServer采用Sch-S锁。5.意向锁意向锁说明SQLServer有在资源的低层获得共享锁或独占锁的意向。例如,表级的共享意向锁说明事务意图将独占锁释放到表中的页或者行。意向锁又可以分为共享意向锁、独占意向锁和共享式独占意向锁。共享意向锁说明事务意图在共享意向锁所锁定的低层资源上放置共享锁来读取数据。独占意向锁说明事务意图在共享意向锁所锁定的低层资源上放置独占锁来修改数据。共享式独占锁说明事务
6、允许其他事务使用共享锁来读取顶层资源,并意图在该资源低层上放置独占锁。6.批量修改锁批量复制数据时使用批量修改锁。可以通过表的TabLock提示或者使用系统存储过程sp_tableoption的“tablelockonbulkload”选项设定批量修改锁。另外,SQLServer命令语句操作会影响锁定的方式,语句的组合也同样能产生不同的锁定,详情如下表:锁冲突及其防止办法在数据库系统中,死锁是指多个用户(进程)分别锁定了一个资源,并又试图请求锁定对方已经锁定的资源,这就产生了一个锁定请求环,导致多个用户(进程)都处于等待对方释放所锁定资
7、源的状态。在SQLServer中,系统能够自动定期搜索和处理死锁问题。系统在每次搜索中标识所有等待锁定请求的进程会话,如果在下一次搜索中该被标识的进程仍处于等待状态,SQLServer就开始递归死锁搜索。我们在开发的过程中主要使用的有:rowLock,tabLock,updlOCK,TABLOCKX(排它锁)一.为什么要引入锁当多个用户同时对数据库的并发操作时会带来以下数据不一致的问题:◆丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统◆脏读A用户修改了数据,随后B用户又读出该数据,
8、但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致◆不可重复读A用户读取数据,随后B用户读出该数据并修改,此时A用户再读取数据时发现前后两次的值不一致并发控
此文档下载收益归作者所有