悲观锁和乐观锁的用处和区别?

博客围绕保证数据安全、处理多用户并发访问,介绍了悲观锁和乐观锁。悲观锁从数据更改开始就锁定,会影响并发;乐观锁修改完成提交时才锁定,现实中使用较多。还给出了两者在 SQL 中的实现方式,并建议依应用状况选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

保证数据安全,处理多用户并发访问。
悲观锁,锁如其名,他对世界是悲观的,他认为别人访问正在改变的数据的概率是很高的,所以从数据开始更改时就将数据锁住,知道更改完成才释放。
乐观锁,他对世界比较乐观,认为别人访问正在改变的数据的概率是很低的,所以直到修改完成准备提交所做的的修改到数据库的时候才会将数据锁住。完成更改后释放。

悲观锁会造成访问数据库时间较长,并发性不好,特别是长事务。
乐观锁在现实中使用得较多,厂商较多采用。

悲观,就是sql上直接锁(select id from table where id=1 for update nowait/wait 3),java捕捉异常,如果没有异常,说明该条记录没有被别的锁着,然后它锁上。如果有异常,说明正被别的锁着,它就不能锁。
乐观,指sql上取得该条记录的更新日时(最好是timestamp型),然后更新语句中,把这个更新日时作为条件加上。如果能被正常更新(更新件数=1)则证明在此期间没有被其他程序更新过,OK。如果不能被正常更新,则证明在此期间被其他程序更新过。

依照AP应用状况,具体分析具体选择使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小哭包

创作不易,给作者加个鸡腿吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值