采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
乐观锁在程序里实现逻辑,可是操作数据库的时候执行update,不也是会默认加上排它锁吗,这不是悲观锁的实现吗?那乐观锁的意义在哪里
因为在程序里,多线程执行的情况下,从数据库取出的数据之后,再写回去前,同样的数据可能已经被另外的线程修改了,所以此时会用版本号来做控制,尽管你底层是用的锁,但是这个锁对应用本身是透明的,并且也没办法去管理应用之间的线程执行顺序,所以在程序层面加上乐观锁比在数据库里控制来得实在
老师您好,关于这位同学问的这个问题,如果用Update操作的话,Innodb会先用一个当前读,select回来数据,并对该行上锁(假设走索引),然后再去对该值进行更新,这个过程中,因为该行是加锁的,所以也不会有数据被其他线程修改的危险呀?为什么还需要用版本号来控制呢,希望可以得到祥仔的解答!
同学好,如果只是通过数据库来执行,肯定不会有这样的问题,但是你是需要把数据取出到程序,在程序里进行计算之后,再写回数据库,此时程序这边就不会受到数据库锁的制约了,会出现混乱,所以根据先来先得的原则,使用版本号来控制
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.7k 27
2.7k 22
1.2k 15
1.4k 14
1.3k 14