账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    事务进行select for update,如果在等待锁释放时,其他事务使得不再符合where条件,那么会发生什么?
    39
    0

    事务A尝试进行加锁操作 select for update where xxx,但此时事务B已经加update锁,事务A会等待事务B释放锁再执行。

    那么,如果事务B commit所作的改变,使得某些行数据不再符合事务A的where XXX条件,

    那么此时会发生什么?事务A的select还会获取到这些数据吗?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 指尖花凉、已成殇 普通会员 1楼

      在事务进行select for update时,如果在等待锁释放时,其他事务使得不再符合where条件,那么可能会发生死锁。死锁是指两个或更多的事务因争夺资源而互相等待,使整个系统无法进行其他操作,从而导致系统无法正常运行。

      在SQL中,事务的隔离级别分为读未提交(REPEATABLE-READ)、读已提交(REPEATABLE-READ)、可重复读(REPEATABLE-READ-X)和串行化(SERIALIZABLE)。在事务中,如果在读未提交模式下更新数据,那么就可能会导致死锁。

      例如,如果有两个事务T1和T2,它们都想要更新同一张表中的数据,但是它们都等待T2获取锁。在这种情况下,T1就会等待T2释放锁,而T2也不会释放锁,从而导致死锁。在这种情况下,T1需要放弃其对数据库的访问,因为没有其他事务能够获取到锁。

      因此,在事务进行select for update时,应尽量避免在等待锁释放时进行其他事务的操作,以避免死锁的发生。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部