读脏数据,不可重复读,幻读的思考

   1前提:事务并发

   2.脏读:A读取数据D,修改数据D,B读取D,A回滚。

      解决:A读之前加一个写锁,直到事务结束才释放,各事务读之前加读锁,防止被修改,对应数据库隔离等级2(默认等级)

   3.不可重复读:因为读锁获取后,并不会持续到事务结束才释放,有可能中途有别的事务获取写锁,从而导致事务2次读取同一个数据不一致。

     解决方法:加了读锁,事务结束才结束,和脏读一样,锁的是所读取的数据。

  4.幻读:A读取数据D,B插入数据D1,D1可被A用同样的sql读出,所以A第二次读的时候还多出D1.。

    解决方法:范围锁,其实就是锁表,完全串行。

 其实不可重复读和幻读在有些情况是可以接收的,看业务需求把

发布了133 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/fbher/article/details/100179219