两个交易发生冲突时会发生什么?

时间:2014-01-27 22:37:47

标签: sql-server transactions isolation-level

我必须实现一个sql事务作为我的任务,并表明我选择了正确的隔离级别。问题是我不确定当隔离级别最佳时两个事务发生冲突时会发生什么。我的意思是,我不知道其中一个是否应该因为死锁或成功完成而被取消但是没有效果(得到回滚?)。我是否使用MS SQL Server。

1 个答案:

答案 0 :(得分:1)

当事务处于死锁状态时,SQL Server会选择一个作为死锁的受害者。 这意味着受害者交易将被取消并回滚,而另一个将继续进行,就像没有发生任何事情一样。 SQL Server根据回滚受害者更改的难度(CPU成本)选择受害者。然后受害者事务将错误输出错误代码1205,这是非常明确的。

您可以自己设置事务的死锁优先级,如第二个链接中所述。

此处有更多详情: http://technet.microsoft.com/en-us/library/ms178104(v=sql.105).aspx

在这里: http://technet.microsoft.com/en-us/library/ms186736.aspx

顺便说一句,你使用SQL Server的事实很重要!其他一些DBMS会将事务永久保存在锁中,而其他DBMS只会选择将两个事务都出错。我从来没有听说过会考虑交易完成并回滚的人,但是......