首先创建一直数据表 ChenJi,有如下字段:

ID, DanWeiID,  Name,  ChenJi

CREATE TABLE [dbo].[ChenJi](
[ID] [int] NOT NULL,
[DanWeiID] [int] NULL,
[Name] [varchar](50) NULL,
[ChenJi] [varchar](50) NULL,
CONSTRAINT [PK_ChenJi] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

表中记录

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

插入与锁

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

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

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

select * from ChenJi --需要等待

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

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

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连接中 依次执行如下一些语句

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

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

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

select * from ChenJi where ChenJi =0 --需要等待

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

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

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连接中 依次执行如下一些语句

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

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

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

select * from ChenJi where ChenJi =0 --需要等待

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

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

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

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

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

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连接中 依次执行如下一些语句

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

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

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

select * from ChenJi where ChenJi =0 --需要等待

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

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

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

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

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

delete from ChenJi where ID = 2  --可以执行

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

MS SQL SERVER 锁研究记录的更多相关文章

  1. MS SQL SERVER 中的系统表

    MS SQL SERVER 中的系统表 序号 名称 说明 备注 1 syscolumns 每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行.   2 syscomments 包含每 ...

  2. (火炬)MS SQL Server数据库案例教程

    (火炬)MS SQL Server数据库案例教程 创建数据库: CREATE DATABASE TDB //数据库名称 ON ( NAME=TDB_dat,//逻辑文件名 在创建数据库完成之后语句中引 ...

  3. Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)

    Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码) http://blog.csdn.net/helonsy/article/details/7207497 ...

  4. 在易语言中调用MS SQL SERVER数据库存储过程方法总结

    Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output ...

  5. [转]了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密_Mr_Indigo的空间

    了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密 关系型数据库,如SQL Server,使用锁来避免多用户修改数据时的并发冲突.当一组数据被某个用户锁定时,除非第一个用户结束修 ...

  6. ms sql server 在abator生成的 insert 无法获取插入 id 的原因

    <insert id="abatorgenerated_insert" parameterClass="net.xxxxxl.dataobject.Users&qu ...

  7. MS SQL Server时间常用函数

    SQLServer时间日期函数详解,SQLServer,时间日期, 1.      当前系统日期.时间 select getdate() 2. dateadd      在向指定日期加上一段时间的基础 ...

  8. 了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密

    关系型数据库,如SQL Server,使用锁来避免多用户修改数据时的并发冲突.当一组数据被某个用户锁定时,除非第一个用户结束修改并释放锁,否则其他用户就无法修改该组数据. 有些数据库,包括SQL Se ...

  9. Oracle\MS SQL Server Update多表关联更新

    原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表 ...

随机推荐

  1. maven中GroupID 和ArtifactID怎么写

    groupId :the unique identifier of the organization or group that created the project artifactId :uni ...

  2. 实现Fragment 切换时不重新实例化

    以前实现Fragment的切换都是用replace方法实现 public void startFragmentAdd(Fragment fragment) { FragmentManager frag ...

  3. [转]20个高级Java面试题汇总

    http://saebbs.com/forum.php?mod=viewthread&tid=37567&page=1&extra= 这是一个高级Java面试系列题中的第一部分 ...

  4. MVC @functions

    asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...

  5. word 使用宏批量设置表格

    Sub ChangeTable() Application.Browser.Target = wdBrowseTable To ActiveDocument.Tables.Count ActiveDo ...

  6. Delphi中如何实现滚动文字

    1.先添加一个Timer控件,其Interval属性设置为50. 2.再添加一个Label控件,Name为Label1. 3.然后在Timer的OnTimer事件添加如下代码: unit Unit13 ...

  7. android文字阴影效果(转)

    关于android文字阴影,共有四个属性可以设置: android:shadowColor :阴影颜色 android:shadowDx :阴影x方向位移 android:shadowDy :阴影y方 ...

  8. 蓝牙的SDP协议总结

    1.概念     SDP协议让客户机的应用程序发现存在的服务器应用程序提供的服务以及这些服务的属性.SDP只提供发现服务的机制,不提供使用这些服务的方法.每个蓝牙设备都需要一个SDP Service, ...

  9. NSUserdefaults 简介以及存储自定义数据类型的方法

    一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个单例,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一 ...

  10. mysql storage enginees

    这段时间在看<High Performance MySQL>,看到存储引擎这个地方感到很多细节比较陌生,所以总结小记一些 为 了适应各种不同的运行环境,MYSQL提供了多种不同的存储引擎( ...