陈奇网络工作室

SQLSERVER数据库的锁

系统操作和维护

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。

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3