mysql加悲观锁后还可以读到的问题

在用到悲观锁的时候遇到了一个问题

明明锁了行,但是还是能够读取到该行数据,并没有实现读等待,

问题出现在了

悲观锁只会把所有写了forupdate的语句进入队列

例如:

A进行

public void A(){

      bDao.find(select * from bid WHERE bid_id = 1 for update);​

​       ......

      commit();​

}​

B进行​

public void B(){

      bDao.find( select * from bid WHERE bid_id = 1);

       ......​

       commit();​​

}​


C进行

public void C(){

       bDao.find(select * from bid WHERE bid_id = 1 for update);

      ......

      commit();​​​

}​


A先直行,在直行commit之前,B和C进来了

此时B执行,能查询到数据,但是如果之后的业务中有对于bid的update语句​,则会等待,直到Acommit后才会提交修改

C则会在一开始的查询​就开始进行等待,知道Acommit后才会查询到数据

展开阅读全文

没有更多推荐了,返回首页