笔记四 事务,死锁
https://www.cnblogs.com/jackson0714/p/TSQLFundamentals_08.html
锁模式(开启事务时候,系统自动带的)
1.排他锁--当更新一条数据的时候,事务为这条数据请求排他锁,其他事务请求查询或者更新删除这条数据,只能进入阻塞队列等待这个更新事务的完成
2.共享锁 --当查询一条数据是,事务为这条数据请求共享锁,其他事务可以查询此数据,但是不能操作(更新或删除)这条数据
set Lock_TIMEOUT 5000 --锁等待时间不超过5秒
set Lock_TIMEOUT -1 --无限等待
查询未提交的sql语句
select * from T with(nolock)
死锁的原因查找
1.
SELECT request_session_id AS 会话id ,
resource_type AS 请求锁定的资源类型 ,
resource_description AS 描述 ,
request_mode AS 模式 ,
request_status AS 状态,
OBJECT_NAME(resource_associated_entity_id) tableName
FROM sys.dm_tran_locks
where resource_type='OBJECT'
2.
SELECT session_id ,
text,
connect_time ,
last_read
FROM sys.dm_exec_connections
CROSS APPLY sys.dm_exec_sql_text
(most_recent_sql_handle) AS ST
WHERE session_id IN (62, 56 )
杀死死锁
kill 70 --kill spid
事务在未提交前,数据库的整张表是锁死的(可以用vs 设置断点调试),这个时候可以开启读提交快照处于打开状态
进程中的锁:锁住资源,只能允许一个进程访问