首先创建一直数据表 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. THinkPHP在模板中的volist循环使用外部变量注意事项

    循环中.自己定义的id=volist就可以使用$volist.id 或者$volist['id'] 而外面定义的变量就不能使用$vo.id 必须使用$vo['id']<volist name=& ...

  2. ThinkPHP中的三大自动简介

    ThinkPHP中的三大自动简介 文章TAG:thinkphp 自动简介 时间:2014-08-23来源:商业源码网 作者:源码库 文章热度: 186 ℃ 过期已备案域名,注册就能用!终身VIP会员, ...

  3. Bootstrap页面布局15 - BS带下拉菜单的按钮

    带下拉菜单的按钮 <div class='btn-toolbar'> <div class='btn-group'> <a href='javascript:;' cla ...

  4. Bootstrap页面布局11 - BS表单

    表单之 文本框 text <input type='text' value='' placeholder='输入您的用户名' class='input-mini' /> ①几个类控制文本框 ...

  5. 【转】Unity 之 移动设备的触控操作

    http://blog.csdn.net/anyuanlzh/article/details/18367941 这篇博文将简单的记录,如何用unity处理在移动设备上的触控操作.    iOS和And ...

  6. 【转】CodeIgniter定义自己的Helper和Helper的方法

    最近做程序,采用了PHP+CodeIgniter框架,总体来说这框架很轻而且上手也很快的. 首先,说下如何定义自己的Helper,个人理解helper其实就是定义函数方法. 如果要建个全新的自己的He ...

  7. 【转】CodeIgniter配置之database

    CodeIgniter的数据库配置文件位于application/config/database.php, 该文件中定义了$db的二维数组,参考文件如下: 1 2 3 4 5 6 7 8 9 10 1 ...

  8. ajax普通弹窗;Bootstrp弹窗

    1.普通弹窗 主页面: <head> <meta http-equiv="Content-Type" content="text/html; chars ...

  9. 蓝牙Bluetooth技术手册规范下载

    [背景] 之前就已经整理和转帖了和蓝牙技术相关的一些内容: [资源下载]bluetooth 协议 spec specification 蓝牙1.1.蓝牙1.2.蓝牙2.0(蓝牙2.0+EDR)区别 但 ...

  10. gtd好文两篇收藏

    http://www.jianshu.com/p/bf5e8a9761f5 http://blog.sina.com.cn/s/blog_4e0f66b80100m73i.html