直切主题

现有一张表

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 该表,其他的记录还可以正常的操作

数据库记录锁表锁实际研究笔记 --- MSSQLSERVER的更多相关文章

  1. MySQL 行锁 表锁机制

    MySQL 表锁和行锁机制 行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整的很惨!不知坑在何方?没事,我来给你们标记几个坑.遇到了可别乱踩.通过本章内容,带你学习MySQL的行锁 ...

  2. MySQL锁(表锁,行锁,共享锁,排它锁,间隙锁)使用详解

    锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是协调多个进程或县城并发访问某一资源的一种机制.在数据库当中,除了传统的计算资源(CPU.RAM.I/O等等)的争用之外,数据也是一 ...

  3. mysql 行锁 表锁

    MySQL数据库 - 引擎: - innodb - 支持事务 - 锁 - 行锁 - 表锁 - 示例: - 终端: begin; select xx from xx for update; commit ...

  4. 浅谈SQL Transaction在请求中断后的行锁表锁

    最近在维护Web Service接口时,由于数据数据量达到千万级别,接口调用不时出现错误让人不胜烦恼,经过性能测试查出瓶颈在数据库数据处理上,可着实忙了一番.相信众多程序猿和DBA都会头痛性能的问题, ...

  5. 【MySQL 读书笔记】全局锁 | 表锁 | 行锁

    全局锁 全局锁是针对数据库实例的直接加锁,MySQL 提供了一个加全局锁的方法, Flush tables with read lock 可以使用锁将整个表的增删改操作都锁上其中包括 ddl 语句,只 ...

  6. [转]MySQL 表锁和行锁机制

    本文转自:http://www.cnblogs.com/itdragon/p/8194622.html MySQL 表锁和行锁机制 行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整 ...

  7. 对mysql乐观锁、悲观锁、共享锁、排它锁、行锁、表锁概念的理解

    乐观锁 乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了. 实现: 通常实现是 ...

  8. MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)

    转载. https://blog.csdn.net/mysteryhaohao/article/details/51669741 锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是 ...

  9. MySQL锁(行锁、表锁、页锁、乐观锁、悲观锁等)

    锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是协调多个进程或县城并发访问某一资源的一种机制.在数据库当中,除了传统的计算资源(CPU.RAM.I/O等等)的争用之外,数据也是一 ...

随机推荐

  1. (原)torch模型转pytorch模型

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/7839263.html 目前使用的torch模型转pytorch模型的程序为: https://gith ...

  2. SpringBoot开发项目,引入JPA找不到findOne方法

    写在前面 开发SpringBoot的DAO层之后,去测试的时候,发现findOne()这个方法找不到了,查看了对应的表字段名和实体类的属性都一致 网上有通过降低版本解决的, 方式太牵强. 还有一种方式 ...

  3. servlet 中通过response下载文件

    public class ResponseDemo3 extends HttpServlet { private static final long serialVersionUID = -52329 ...

  4. [转] mysql --prompt介绍

    mysql --prompt修改命令行链接mysql时的提示符,shell脚本示例如下 #!/bin/bash case $1 in crm) cmd='mysql -h192.168.1.2 -ur ...

  5. Ubuntu菜鸟入门(十一)—— windows 和 ubuntu时间冲突解决

    一.问题原由 Ubuntu和Windows默认的时间管理方式不同,所以双系统发生时间错乱是正常的 Ubuntu默认时间是把BIOS时间当成GMT+0时间,也就是世界标准时,而我国在东八区(GMT+8) ...

  6. canOpenURL: failed for URL: "weixin://app/wx 问题解决方式

    canOpenURL: failed for URL: “weixin://app/wx 问题解决方式: 在info.plist里面添加以下内容: <key>LSApplicationQu ...

  7. xtrabackup部分备份数据库 Partial Backups

    官方文档: 部分备份: http://www.percona.com/doc/percona-xtrabackup/2.1/innobackupex/partial_backups_innobacku ...

  8. SharePoint CAML In Action——Part I

    在SharePoint中,我们经常要对List进行操作,比如要从List中取出相应的ListItem,利用CAML是个好办法.在没了解CAML之前,我是这样取数据的: MyList.Items.Cas ...

  9. 【Python】Windows平台下Python、Pydev连接Mysql数据库

    Mysql数据库是跨平台的,不是说Python一定就要连接Mongodb. Python连接Mysql数据库是非常easy的. 首先,你要配置好Python的开发环境,详见<[Python]Wi ...

  10. 开关电源9v,1A