我的SQL:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ ;
update RECORD_TASK WITH ( ROWLOCK ) set RESULT = ? , ACTFLAG = ? where TASKID = ?
报错:
java.lang.Exception: com.microsoft.sqlserver.jdbc.SQLServerException: 事务(进程 ID 308)与另一个进程被死锁在 锁 | 线程 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
引起原因:
表:RECORD_TASK ,程序是一个多线程的程序,操作这个表的线程可能很多,但每一个线程 的TASKID 都是不同的,就是说每一个线程锁定的行应该是唯一而且相互不影响的.
问:
为什么还是会报死锁,SQL中把WITH ( ROWLOCK ) 改为WITH ( UPDLOCK ) 也还是一样的.
请教高人.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13925369/viewspace-624664/
,如需转载,请注明出处,否则将追究法律责任。