我的应用程序间歇性地陷入僵局。我的应用程序有 1 个表,例如 EMPLOYEE(ID (PK)、NAME、SAL),并且有 2 个会话。
第 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);
Session 2:(其他业务逻辑)
SELECT ID, NAME, SAL FROM EMPLOYEE WHERE ID=2 FOR UPDATE.
因此,在应用程序中,两个会话都尝试更新同一行(在 ID=2 的示例行中)这种情况是预期的,因此我认为 SELECT .. FOR UPDATE 会有所帮助。
难道我做错了什么?我假设 SELECT FOR UPDATE 将锁定该行,并且当其他会话将尝试更新同一行时,它将等到会话 1 完成执行。