请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答 回答被采纳积分+3

1回答

翔仔 2019-10-28 01:51:56

同学好,不可重复读是指在一个事务中不希望读到别的事务改过的数据,要改也只能我来改。如果第二次读取和第一次结果不一致,那么之后的运算结果和开始的并不一样,会引发不必要的麻烦,无论是对预期结果的校验还是对问题的追溯。举个不知道是否恰当的例子,比如某人去银行取钱,他取之前查了下余额,发现是1000,然后取了200(在他查和取之间,他女朋友在别处用他的卡号绑定的网银花了100,因此实际取的时候要是查的话就是900,前后不一致),发现余额变成了700。此时如果他没开通短信消费提醒且没有APP通知他他女朋友消费的情况下就要去找柜台麻烦了。

2 回复 有任何疑惑可以回复我~
  • 那会不会有这种情况,当我在一个事务中查询了余额是1000,然后要减少200,那我就设置余额是800,在查和设置之间,我女朋友取了100,然后我设置余额是800,最终余额是800,这样的话就出现了问题,按理说最终余额应该是700。
    这种情况该如何避免呢?是在编程的过程中避免么?如不直接设置800,而是直接设置 余额=余额-200 来避免这种情况
    如果是在编程的过程中避免的话,那更复杂的情况该怎么办呢?假如我读取到一个值,经过很复杂的计算得到了一个结果,然后在中间过程有个人修改了值,那我这个很复杂的计算不久白费了么,是要加锁什么的解决么
    回复 有任何疑惑可以回复我~ 2020-09-11 09:49:58
  • 同学好,这种情况比较有效的方式就是加锁,当一个线程在操作数据的时候,另外一个线程只能等待,否则就只能保证操作原子性,也就是直接在sql里面扣减才可以
    回复 有任何疑惑可以回复我~ 2020-09-12 00:36:20
  • 谢谢老师
    回复 有任何疑惑可以回复我~ 2020-09-13 08:39:43
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信