【发布时间】:2013-10-19 21:36:18
【问题描述】:
我的应用程序间歇性地陷入僵局。我的应用程序有 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);
会话 2:(用于其他业务逻辑)
SELECT ID, NAME, SAL FROM EMPLOYEE WHERE ID=2 FOR UPDATE.
因此,在应用程序中,两个会话都尝试更新同一行(在 ID=2 的示例行中)这种情况是意料之中的,因此我认为 SELECT .. FOR UPDATE 会有所帮助。
我做错了吗?我假设 SELECT FOR UPDATE 将锁定该行,当其他会话尝试更新同一行时,它将等到会话 1 完成执行。
【问题讨论】:
标签: sql sql-update database-deadlocks