小编Dan*_*Zen的帖子

SELECT FOR UPDATE中的数据库死锁

我的申请中间歇性地陷入僵局.我的应用程序有1个表,例如EMPLOYEE(ID(PK),NAME,SAL),有2个会话.

第一节:

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);
Run Code Online (Sandbox Code Playgroud)

第2节:(针对其他业务逻辑)

SELECT ID, NAME, SAL FROM EMPLOYEE WHERE ID=2 FOR UPDATE.
Run Code Online (Sandbox Code Playgroud)

因此,在应用程序中,两个会话都尝试更新同一行(在ID = 2的示例行中)这种情况是预期的,因此我认为SELECT .. FOR UPDATE将有所帮助.

难道我做错了什么?我假设SELECT FOR UPDATE将锁定该行,当其他会话将尝试更新同一行时,它将等待会话1完成执行.

sql database-deadlocks sql-update

3
推荐指数
1
解决办法
6530
查看次数

标签 统计

database-deadlocks ×1

sql ×1

sql-update ×1