sql 事物造成的死锁问题怎么解决

问题描述

sql 事物造成的死锁问题怎么解决

做了个程序,局域网内多个用户进行下面sql事物操作的时候容易出现死锁的情况,使得部分用户户无法插入数据,下面是简化版,大概的意思有了,请问该如何优化修改
begin transaction
declare @errorSum int
set @errorSum=0

                    if ((select 1 from Table1  where student_sn=@student_sn) = 1)
                        begin
                            update Table1 set is_chk=0   where student_sn=@student_sn;
                        end
                    else
                        begin
                            insert into Table1  (student_sn) values(@student_sn);
                        end

                    select count(1) from  Table1 where  user_sn=@user_sn

                    set @errorSum=@errorSum+@@ERROR
                    if @errorSum<>0
                        begin
                            rollback transaction
                        end
                    else
                        begin
                            commit transaction
                        end
时间: 2024-09-27 08:33:35

sql 事物造成的死锁问题怎么解决的相关文章

死锁问题-sql server 用这段语句,3个人一起点就容易死锁,有解决过的没有,如果解决的话,加分给你

问题描述 sql server 用这段语句,3个人一起点就容易死锁,有解决过的没有,如果解决的话,加分给你 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ BEGIN TRAN DECLARE @UserCode VARCHAR(20) SELECT TOP 1 @UserCode=usercode FROM dbo.tb_refUserCode With(RowLock,UpdLock) WHERE usestatus=0 --WHERE Use

SQLServer 2008 R2 死锁监控及解决办法

1. 死锁原理     根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态.     死锁的四个必要条件: 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用. 请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源. 非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺. 循环等待条件(Circular wai

sql server 2005时发生18452错误解决方法

ODBC 测试sql server 2005时发生18452错误解决方法 用.net开发的网站连接数据库里发生错误,当访问静态页面里显示正常. 1.首先想到的是测试ODBC数据源,当用sql用户和密码登录时出现如下图错误: 2.因为是在客户服务器上安装,所以未设置sa的密码,由于安装时未勾选择了"windows身份验证",所以当你测试sql server 2005的用户时出现此错误. 3.打开"SQL Server Management Studio"双击数据库所在

Win7安装SQL Server2008提示重启计算机失败的解决办法

Win7安装SQL Server2008提示重启计算机失败的解决办法 1.同时按下Win7旗舰版电脑键盘上的win+R快捷键打开电脑的运行窗口,在打开的运行窗口中,输入regedit并单击回车,这样就可以打开注册表编辑器窗口了 2.在打开的注册表编辑器窗口中,点击展开左侧菜单中的HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server; 3.然后在这个Microsoft SQL Server选项上点击鼠标右键,选择删除; 4.再次在左侧菜单中

关于SQL Server中的死锁详解介绍(1/3)

 一些基础知识     要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理解死锁.比如说一个经典的例子就是汽车(主体)对于道路(资源)的征用,如图1所示. 对于死锁的直观理解      在图1的例子中,每队汽车都占有一条道路,但都需要另外一队汽车所占有的另一条道路,因此互相阻塞,谁都无法前行,因此造成了死锁.由这个简单的例子可以看出,发生死锁需要四个必要条件,如下: 1)互斥条件:     主体对于资源是独占的,图1中每条汽车道只能跑一队汽车,不能跑第二队.  2)请求和等待条

怎么办-microsoft sql 2008 r2 出现错误1406怎么解决 求助~~~

问题描述 microsoft sql 2008 r2 出现错误1406怎么解决 求助~~~ 出现一下错误: 错误1406.无法将值 写入注册表SoftwareClassesCLSID{1F69F884-285E-418E-9715-B9EEE402DD5F}LocalServer32.请确认您有足够的权限访问该注册表项,或者与支持人员联系. 解决方案 http://wenku.it168.com/d_000653718.shtml 参考

DllMain加载其他DLL造成的死锁问题及其解决办法

  使用VS 2008新建一个MFC ActiveX工程,因为在工程里要用到GDI+.我习惯把初始化GDI+库的代码放在应用程序类的InitInstance函数,对应的销毁代码放在ExitInstance函数.具体如下: 先在应用程序类里定义一个数据成员:         [cpp] view plaincopy ULONG_PTR   m_gdiplusToken;       然后添加初始化GDI+库的代码和对应的销毁代码:        [cpp] view plaincopy BOOL 

sql server 2008数据库无法启动的解决办法(图文教程)_mssql2008

事故起因: 之前使用SQL Server2008+VS2010开发,安装VS2012后数据库忽然无法连接 发现SQL Server配置管理器显示远程过程调试失败 原因&对策: VS2012中自带的Local DB和Server2008冲突 在添加和删除程序中删除"Microsoft SQL Server 2012Local DB"后问题应该解决   祸不单行: 远程过程调试失败后出现了"请求失败或服务未及时响应",服务仍旧无法启动   数据库服务无法启动的常

SQL2008中SQL应用之- 死锁(Deadlocking)_mssql2008

在另一方释放资源前,会话1和会话2都不可能继续.所以,SQL Server会选择死锁中的一个会话作为"死锁牺牲品". 注意:死锁牺牲品的会话会被杀死,事务会被回滚. 注意:死锁与正常的阻塞是两个经常被混淆的概念. 发生死锁的一些原因: 1.应用程序以不同的次序访问表.例如会话1先更新了客户然后更新了订单,而会话2先更新了订单然后更新了客户.这就增加了死锁的可能性. 2.应用程序使用了长时间的事务,在一个事务中更新很多行或很多表.这样增加了行的"表面积",从而导致死锁