sql的几种常用锁简述

Posted zhuyapeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql的几种常用锁简述相关的知识,希望对你有一定的参考价值。

SELECT * FROM dbo.AA
SELECT * FROM dbo.B
--1.排它锁
--增删改查都不行
--这个是数据库自己,为了出现数据错乱、脏数据自己加的处理机制
--连接1
begin tran

update dbo.B

set name=‘bb‘

where id=1

waitfor delay ‘00:00:30‘ --等待30秒

commit tran


--在第二个连接中执行以下语句

begin tran

select * from B

commit tran

 

--若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待30秒

 

--2)共享锁
--holdlock:可以查询但不能增删改
--在第一个连接中执行以下语句

begin tran

select * from dbo.B (HOLDLOCK) --holdlock人为加锁

waitfor delay ‘00:00:30‘ --等待30秒

commit tran

 

--在第二个连接中执行以下语句

begin tran

select * from dbo.B

update dbo.B

set name=‘ff‘

where id=‘1‘

commit tran

 

--若同时执行上述两个语句,则第二个连接中的select查询可以执行

--而update必须等待第一个事务释放共享锁转为排它锁后才能执行 即要等待30秒


--3)TABLOCKX(独占锁)
--TABLOCKX:其他事务增删改查都不行
--在第一个连接中执行以下语句

begin tran

select * from dbo.B (TABLOCKX) --holdlock人为加锁

waitfor delay ‘00:00:30‘ --等待30秒

commit tran

 

--在第二个连接中执行以下语句

begin tran

select * from dbo.B

commit tran

 

--若同时执行上述两个语句,则第二个连接中的select查询要等待30秒


--3)死锁


--在第一个连接中执行以下语句

begin tran

update dbo.A

set name=‘aa‘

where id=‘1‘

waitfor delay ‘00:00:30‘

update dbo.B

set name=‘aa‘

where id=‘1‘

commit tran

 

--在第二个连接中执行以下语句

begin tran

update dbo.b

set name=‘aa‘

where id=‘1‘

waitfor delay ‘00:00:10‘

update dbo.A

set name=‘aa‘

where id=‘1‘

commit tran

 

--同时执行,系统会检测出死锁,并中止进程


--查看死锁
select
request_session_id spid,
OBJECT_NAME(resource_associated_entity_id) tableName
from
sys.dm_tran_locks
where
resource_type=‘OBJECT‘

--杀死死锁进程
kill spid
























以上是关于sql的几种常用锁简述的主要内容,如果未能解决你的问题,请参考以下文章

什么是容器的布局,试列举并简述java中常用的几种布局策略

JDK提供的几种常用的锁

sql 的几种常用方法

sql 创建视图常用的几种sql函数

HIVE常用命令之ANALYZE TABLE命令简述

iwebshop框架用到的几种常用sql处理