系统操作和维护
1 1 SQL服务器锁的概念
共享锁:用于读取资源添加的锁。不能修改带有共享锁的资源。默认情况下,共享锁会在读取资源后立即释放。
独占锁:与其他锁不兼容,包括其他独占锁锁。排他锁用于修改数据。当独占锁被添加到资源中时,请求读取或修改该资源的其他事情将被阻塞,直到独占锁被释放。
更新锁:共享锁和排他锁的组合,用于更新数据。更新数据时,需要先找到更新的数据,可以理解为对搜索到的数据进行共享锁。当找到要修改的数据时,修改的资源需要是排他锁。
Sql server通过更新锁来避免死锁,因为共享锁和共享锁是兼容的。通过更新锁和共享锁,数据查找在更新查找期间不受影响,但是更新锁和更新锁是不兼容的,从而降低了死锁的可能性。
举一个上面描述的锁的例子:
1.1.创造环境
—创建一个表格
创建表格学生
(
学生身份证,
sname nvarchar(10),
性nchar(1)
)
插入学生
插入学生价值观(1,'张飞''女')
插入学生值(2,'甄姬''男')
插入学生值(3,“招聘”,“女性”)
插入学生值(4,'王五''女')
插入学生价值观(5,'李四''男')
1.1专用锁。创建两个新连接。
在第一个连接中执行以下语句。
begintran
更新dbo.student集合sname=' Wang '其中studentid=1
等待延迟' 00:00:30 '
委员会
在第二个连接中执行以下语句。
begintran
select * from dbo.student其中studentid=1
委员会
如果同时执行以上两条语句,select查询必须等待更新执行,这意味着需要30秒。
1.1.共享锁
在第一个连接中执行以下语句。
begintran
select * from dbo . student with(hold lock)
其中性别='女性'
等待延迟' 00:00:30 '
委员会
在第二个连接中执行以下语句。
begintran
Select学生id,snamefromdbo.student,其中性别='女性'
更新dbo.student集合sname='韩旭'其中性别='女性'
委员会
如果同时执行以上两条语句,可以执行第二个连接中的select查询,更新必须等待一个东西释放。
共享锁只有在变成独占锁后才能执行,需要等待30秒。
1.1 .死锁
1.1.更新锁
更新锁
在第一个连接中执行以下语句。
begintran
select * from dbo . student with(up lock)其中snake=' Huarong '
等待延迟' 00:00:30 '
更新dbo.student set sname=' Nannan Bai '
委员会
select * from sys.dm_tran_locks
在第二个连接中。
begintran
select * from dbo . student with(up lock)其中snake=' Huarong '
等待延迟' 00:00:30 '
如果在第二个连接中也添加了更新锁,则当前查询将被阻塞,直到该连接释放更新锁。
如果没有添加更新锁,则可以直接读取更新锁的记录。
有时我需要控制一条记录在我读取后不允许被更新,所以我可以给所有需要处理当前记录的查询添加一个更新锁,以防止查询被其他事务修改,并将事务的影响降到最低。
更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码代理官网:www.chenqinet.cn。