我有一个同时调用的方法。在该方法中,我定义了一个事务,其中一些DELETE
操作和SELECT
操作正在对方法中传递的参数进行。我尝试同时调用此方法并在每个时刻传递不同的数据。我得到一个错误:同时访问同一个表的两笔交易
Error 1205 : Transaction (Process ID) was deadlocked on resources with another process and has been chosen as the deadlock victim. Rerun the transaction
方法的身体看起来是这样的:
public void method(param){
//transaction starts
// delete operation on table 1
// select operation on table 1
// transaction is committed.
}
要有事务T1和T2
,我认为不应该在这一点,因为发生此死锁情况案例行级锁定将基于我在该方法中传递的参数应用。如果交易T2想删除其他数据,则交易T1不应阻止其删除。发生的事情是,由于我正在捕获SQLException
,所以一个事务正在回滚,因此只有一条记录被成功删除。任何人都可以找出为什么这不起作用?
您正在使用哪种RDBMS? –
这里使用java的并发机制是不可接受的吗? - ''synchronized' – lynks
hi Erkan我正在使用Microsoft SQL Server – Naman