Eddie780
2021-07-20 20:41
采纳率: 100%
浏览 244
已结题

pymysql中select……for update不锁行问题


conn = pymysql.connect(...)
lsc = conn.cursor()
conn.begin()
lsc.execute("select * from user where uid=93442 for update;")
lsonerow = lsc.fetchone()
print("现有金钱:", lsonerow[0])
time.sleep(10)
conn.commit()
lsc.close()
print("完整执行完成")

引擎是InnoDB,uid是user表主键。
以上代码理应查到数据后锁行,十秒后放开锁,锁期间其他增删改行为被阻塞。
但测试发现,在等待十秒期间,其他的终端依然可以update!
像是conn.begin()根本没起作用?

数据库应该没问题,因为尝试过开2个终端,终端A执行
begin;
select * from user where uid=93442 for update;
之后再使用终端B尝试update,能够进入阻塞,直至终端A执行commit后才解除阻塞。

img

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

6条回答 默认 最新

相关推荐 更多相似问题