知识大全 SQL SERVER的锁

Posted 数据库

篇首语:白米饭好吃,五谷田难种。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 SQL SERVER的锁相关的知识,希望对你有一定的参考价值。

SQL SERVER的锁  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  通常我们在进行数据库的新增 修改 删除 查询的时候如果我们面对的不是多个用户也及时单机处理的时候 一般我们基本上不需要考虑数据库的表锁定以及死锁之类情况 但是如果我们面对的是多用户的并行处理的网络环境的时候我们对表锁定的问题就需要较为仔细的分析和考虑 否则他给我们带来的麻烦就不言而喻了 下面就把我的在这件事情上遇到的问题以及解决办法同大家一起分享     也是在我的开发过程当中有这样的事情     两个用户同时保存新增的数据 我们的程序开始是这样处理   cn BeginTrans   cn Execute insert into tableA   Set rs = cn Execute( select count(*) from tableA where )   If rs RecordCount > Then    表A 的字段A不能从复   cn RollbackTrans   Else   cn CommitTrans   End If     当SQL SERVER 在执行INSERT 命令时如果我们不添加任何参数时 数据库默认申请一个 IX 锁 给表A这时候我们来分析上面的程序 当第一个用户执行 cn Execute insert into tableA Connection   向数据库申请了一个 IX 锁 给表A 与此同时当第二个用户执行 cn Execute insert into tableA Connection 也向数据库也成功地申请了一个 IX 锁 给表A 但是当执行   Set rs = cn Execute( select count(*) from tableA where )   这一句的时候就会有问题产生 我们假设第一个用户先一步执行 由于SELECT命令需要向数据库申请一个   S 锁给表A 但是由于这时候表A已经存在一个IX锁并且属于另外一个连接因此他只好在此等候 紧接着第二个   用户也执行   Set rs = cn Execute( select count(*) from tableA where )   他也会向数据库申请一个S 锁给表A 这时候数据就会自动结束较晚申请IX锁的连接同时回滚这个事务   这样子对于我们的应用来说就是一个很大的失败     解决的办法一 设置数据参数让我们可以读取没有提交的数据     cn BeginTrans   cn Execute SET TRANSACTION ISOLATION LEVEL READ UNMITTED   cn Execute insert into tableA   Set rs = cn Execute( select count(*) from tableA where )   If rs RecordCount > Then    表A 的字段A不能从复   cn RollbackTrans   Else   cn CommitTrans   End If   cn Execute SET TRANSACTION ISOLATION LEVEL READ MITTED     解决的办法二 设置INSERT 命令 参数 with (tablock)     cn BeginTrans   cn Execute insert into tableA with (tablock)   Set rs = cn Execute( select count(*) from tableA where )   If rs RecordCount > Then    表A 的字段A不能从复   cn RollbackTrans   Else   cn CommitTrans   End If     解决的办法三 增加一个没有用Lock 表     cn BeginTrans   cn Execute update tmpLockTable set FieldLock=   cn Execute insert into tableA with (tablock)   Set rs = cn Execute( select count(*) from tableA where )   If rs RecordCount > Then    表A 的字段A不能从复   cn RollbackTrans   Else   cn CommitTrans   End If cha138/Article/program/SQLServer/201311/11233

相关参考

知识大全 如何用SQL SERVER 2005连接SQL SERVER 2008

如何用SQLSERVER2005连接SQLSERVER2008  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 SQL Server 2005和SQL Server 2000数据的相互导入

SQLServer2005和SQLServer2000数据的相互导入  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 安装sql server 2008 management提示已安装 SQL Server 2005

安装sqlserver2008management提示已安装SQLServer2005  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布

知识大全 SQL Server执行动态SQL正确方式

SQLServer执行动态SQL正确方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  SQLS

知识大全 SQL Server 管理常用的SQL和T-SQL

SQLServer管理常用的SQL和T-SQL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  S

知识大全 SQL Server执行SQL语句时内存占用特点[3]

SQLServer执行SQL语句时内存占用特点[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 SQL Server执行SQL语句时内存占用特点[4]

SQLServer执行SQL语句时内存占用特点[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 SQL Server执行SQL语句时内存占用特点[2]

SQLServer执行SQL语句时内存占用特点[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 SQL Server执行SQL语句时内存占用特点[1]

SQLServer执行SQL语句时内存占用特点[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 MS SQL基础教程 SQL Server 2000 简介

MSSQL基础教程SQLServer2000简介  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n