我应用程序偶尔会出现死锁。我的应用程序有一个表,例如 EMPLOYEE (ID (PK), NAME, SAL),并且有2个会话。
会话1:
会话1:
SELECT ID, NAME, SAL FROM EMPLOYEE WHERE SAL = (SELECT MIN(SAL) FROM
EMPLOYEE) FOR UPDATE
Let say the query return EMPLOYEE ROW having ID=2
then application does some processing like rs.updateInt(ID_SAL, 10);
第二节:(适用于其他业务逻辑)
SELECT ID, NAME, SAL FROM EMPLOYEE WHERE ID=2 FOR UPDATE.
因此,在应用程序中,两个会话都尝试更新相同的行(例如ID为2的行)。这种情况是可以预料的,因此我认为使用SELECT .. FOR UPDATE将有所帮助。
我做错了什么吗?我假设SELECT FOR UPDATE将锁定该行,并且当其他会话尝试更新相同的行时,它将等待直到会话1完成执行。