sql 死锁 和 事物回滚 问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 03:38:12
比如两个人同时要进行数据库操作
第一个人执行的是存储过程 里面是添加修改删除操作
第二个人执行的也是存储过程 里面也是添加修改删除操作
这时候 发生死锁了我想让我执行的存储过程里面加入自动判断死锁处理死锁回滚事物并且返回错误代码,然后我到前台就可以判断错误代码然后告诉用户操作失败请重新操作当他点击按钮时继续刚才的操作。

问题 :如何在我执行sql存储过程的时候自动判断是不是死锁了并且处理死锁
处理之后将之前操作的内容全部回滚 然后返回发生死锁错误代码

如果那个大哥大姐知道 能给我个这样的存储过程么??我谢谢大家了!拜托了!

首先要在逻辑上避免死锁发生的情况,这才是最重要的

如果要在过程里判断是不是死锁的牺牲加
begin tran
begin try
执行语句
end try
begin catch
执行发生错误后的处理
rollback tran
end catch
commit tran

死锁在数据库事务处理期内,是很难判断死锁的。至于在解除死锁后是否回滚,则与你的事务定义的逻辑关系有关,如果你的语句逻辑严谨的话,人工解除死锁后,数据库能够自动回滚。

避免数据库死锁的最好办法是在关键处理语句部分使用事务机制,并且在编写调用程序时(如C#、VB等),进行严密的判断,尽量避免各种可能的语句冲突。而不是通过存储过程来解决。

事务是会串行化的,一般不会发生死锁,并且程序自己是不能知道自己死锁的