数据库记录锁表锁实际研究笔记 --- MSSQLSERVER

php中文网
发布: 2016-06-07 17:38:25
原创
1215人浏览过

直切主题 现有一张表 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 t

直切主题

现有一张表

table : ChenJi

ID, DanWeiID,  Name,  ChenJi

 

Tellers AI
Tellers AI

Tellers是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。

Tellers AI 78
查看详情 Tellers AI

表中记录

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  可以执行

 

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号