博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库记录锁表锁实际研究笔记 --- MSSQLSERVER
阅读量:6678 次
发布时间:2019-06-25

本文共 2845 字,大约阅读时间需要 9 分钟。

直切主题

现有一张表

table : ChenJi

ID, DanWeiID,  Name,  ChenJi

 

表中记录

ID  DanWeiID    Name      ChenJi

--- ----------- --------- ---------
1   1           aa        91
2   1           bb        91
3   1           cc        33
4   2           dd        164
5   2           ee        155
6   2           ff        166

 

在查询分析器里面开两个连接

A连接

begin tran t1

insert into ChenJi (DanWeiID, Name, ChenJi) values (3, ‘张三', 98)

rollback tran t1

B连接

 

 

插入与锁

先开始A连接的事务,不急着结束事务

然后在B连接中 依次执行如下一些语句

 

1.insert into ChenJi (DanWeiID, Name, ChenJi) values (3, ‘李四', 99) 可以执行插入语句

2.select * from ChenJi 需要等待

3.select * from ChenJi where Name = 'aa' 需要等待

3.update ChenJi SET ChenJi = 91 WHERE Name = 'aa'  需要等待

4.delete from ChenJi where Name = 'aa' 需要等待

 

研究发现如果在一个表中进行了开启事务执行插入语句,会对这个表的select ,update,delete进行排斥锁定,但是其他连接中还可以进行insert 该表

 

更新与锁

在查询分析器里面开两个连接

A连接

begin tran t1

update ChenJi SET ChenJi = 91 WHERE Name = 'aa'

rollback tran t1

 

先开始A连接的事务,不急着结束事务

然后在B连接中 依次执行如下一些语句

1. update ChenJi SET ChenJi = 91 WHERE Name = 'aa' 需要等待

2.select * from ChenJi where Name = 'aa' 需要等待

3.select * from ChenJi where Name = 'bb' 需要等待

4.select * from ChenJi where ChenJi =0 需要等待

5.update ChenJi SET ChenJi = 91 WHERE Name = 'bb'  需要等待

6.delete from ChenJi where Name = 'bb'需要等待

7.insert into ChenJi (ID, DanWeiID, Name, ChenJi) values (100, 3, 'ymf', 98) 可以执行插入语句

 

研究发现如果在一个表中进行了开启事务执行更新语句,会对这个表的select ,update,delete进行排斥锁定,但是其他连接中还可以进行insert 该表

 

 

主键与锁

在查询分析器里面开两个连接

在ChenJi表上面加入主键ID int类型

A连接

begin tran t1

update ChenJi SET ChenJi = 91 WHERE ID = 1

rollback tran t1

 

先开始A连接的事务,不急着结束事务

然后在B连接中 依次执行如下一些语句

1. update ChenJi SET ChenJi = 91 WHERE Name = 'aa' 需要等待

2.select * from ChenJi where Name = 'aa' 需要等待

3.select * from ChenJi where ID = 1 需要等待  --因为name = ‘aa’

4.select * from ChenJi where ChenJi =0 需要等待

5.update ChenJi SET ChenJi = 91 WHERE Name = 'bb'  可以执行

6.delete from ChenJi where Name = 'bb' 可以执行

7.insert into ChenJi (ID, DanWeiID, Name, ChenJi) values (100, 3, 'ymf', 98) 可以执行语句

8.update ChenJi SET ChenJi = 91 WHERE ID = 2 可以执行

9.select * from ChenJi where ID = 2  可以执行

10.delete from ChenJi where ID = 2  可以执行

 

 研究发现如果在一个表中进行了开启事务执行更新语句并用了主键做条件,会对这个表的主键对应的记录select ,update,delete进行排斥锁定,是其他连接中还可以进行insert 该表,其他的记录还可以正常的操作

 

 

索引锁

在查询分析器里面开两个连接

在ChenJi表上面对Name字段进行索引<不是唯一性的索引>, ID依旧是主键

 

A连接

begin tran t1

update ChenJi SET ChenJi = 91 WHERE name = ‘aa’

rollback tran t1

 

先开始A连接的事务,不急着结束事务

然后在B连接中 依次执行如下一些语句

1. update ChenJi SET ChenJi = 91 WHERE Name = 'aa' 需要等待

2.select * from ChenJi where Name = 'aa' 需要等待

3.select * from ChenJi where Name = 'bb' 可以执行

4.select * from ChenJi where ChenJi =0 需要等待

5.update ChenJi SET ChenJi = 91 WHERE Name = 'bb'  可以执行

6.delete from ChenJi where Name = 'bb' 可以执行

7.insert into ChenJi (ID, DanWeiID, Name, ChenJi) values (100, 3, 'ymf', 98) 可以执行语句

8.update ChenJi SET ChenJi = 91 WHERE ID = 2 可以执行

9.select * from ChenJi where ID = 2  可以执行

10.delete from ChenJi where ID = 2  可以执行

 

 研究发现如果在一个表中进行了开启事务执行更新语句并用了索引字段做条件,会对这个表的条件对应的记录select ,update,delete进行排斥锁定,是其他连接中还可以进行insert 该表,其他的记录还可以正常的操作

 

转载地址:http://siyao.baihongyu.com/

你可能感兴趣的文章
【零基础学习iOS开发】【01-前言】02-准备
查看>>
matlab之图像处理(2)
查看>>
javascript JSON
查看>>
基于AllegroGraph实现Protege设计知识库模型的存储步骤
查看>>
EL表达式获取参数值${param.name}等
查看>>
远程桌面不能复制粘贴的解决办法
查看>>
iOS开发-UITapGestureRecognizer手势
查看>>
tcpdump wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容) 实例介绍...
查看>>
C#.net调用axis2webService
查看>>
NOIP2010乌龟棋[DP 多维状态]
查看>>
Linux 系统中用户切换(su user与 su - user 的区别)
查看>>
微信订阅号消息回复测试
查看>>
数据库 Proc编程二
查看>>
zabbix-agent 自动注册
查看>>
java.lang.AbstractStringBuilder.enlargeBuffer
查看>>
HTML5新增与结构有关的元素
查看>>
C# 复制和克隆认识浅谈
查看>>
Python和Flask真强大:不能错过的15篇技术热文(转载)
查看>>
【LeetCode】Swap Nodes in Pairs 链表指针的应用
查看>>
Swift,Objective-C语言性能对照測试
查看>>