我有一个同时调用的方法。在该方法中,我定义了一个事务,其中在方法中传递的参数上发生了一些DELETE
操作和操作。SELECT
我尝试同时调用此方法并在每个瞬间传递不同的数据。我收到一个错误:
错误 1205:事务(进程 ID)在资源上与另一个进程死锁,并已被选为死锁牺牲品。重新运行事务
方法体如下所示:
public void method(param){
//transaction starts
// delete operation on table 1
// select operation on table 1
// transaction is committed.
}
假设有事务 T1 和 T2
我认为这种死锁情况不应该发生,因为在这种情况下,行级锁定将基于我在方法中传递的参数应用。如果事务 T2 想要删除其他数据,则事务 T1 不应阻止它删除它。发生的事情是一个事务正在回滚,因为我正在捕捉,SQLException
因此只有一条记录被成功删除。谁能弄清楚为什么这不起作用?