开发者社区> 问答> 正文

数据库如何实现悲观锁和乐观锁?

数据库如何实现悲观锁和乐观锁?

本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。 点击链接欢迎加入感兴趣的技术领域群。

展开
收起
游客pklijor6gytpx 2019-11-11 15:03:16 4887 0
3 条回答
写回答
取消 提交回答
  • https://www.jianshu.com/p/f5ff017db62a

    2020-08-03 21:28:33
    赞同 展开评论 打赏
  • 乐观锁不是数据库自带的,需要我们自己去实现。乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了。

    通常实现是这样的:在表中的数据进行操作时(更新),先给数据表加一个版本(version)字段,每操作一次,将那条记录的版本号加1。也就是先查询出那条记录,获取出version字段,如果要对那条记录进行操作(更新),则先判断此刻version的值是否与刚刚查询出来时的version的值相等,如果相等,则说明这段期间,没有其他程序对其进行操作,则可以执行更新,将version字段的值加1;如果更新时发现此刻的version值与刚刚获取出来的version的值不相等,则说明这段期间已经有其他程序对其进行操作了,则不进行更新操作。

    悲观锁就是在操作数据时,认为此操作会出现数据冲突,所以在进行每次操作时都要通过获取锁才能进行对相同数据的操作。

    数据库有实现悲观锁,共享锁和排它锁就是两种实现方式。共享锁指的就是对于多个不同的事务,对同一个资源共享同一个锁,在执行语句后面加上lock in share mode就代表对某些资源加上共享锁了。排它锁与共享锁相对应,就是指对于多个不同的事务,对同一个资源只能有一把锁,在需要执行的语句后面加上for update就可以了

    2019-12-13 10:07:14
    赞同 展开评论 打赏
  • 借助数据库锁机制在修改数据之前先锁定,再修改并发控制

    2019-11-11 15:05:22
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载