mysql悲观锁和乐观锁实例_MYSQL 悲观锁和乐观锁

古城微笑少年丶 2022-11-01 00:53 403阅读 0赞

前文我们提到了表锁,行锁的这些概念,今天我们来谈谈mysql的悲观锁和乐观锁。

何为乐观锁?

顾名思义,乐观锁就是乐观的意思,不去主动加锁,乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了。

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

举例:

下单操作包括3步骤:

1.查询出商品信息

select (status,status,version) from t_goods where id=#{id}

2.根据商品信息生成订单

3.修改商品status为2

update t_goods set status=2,version=version+1 where id=#{id} and version=#{version};

悲观锁

与乐观锁相对应的就是悲观锁了。悲观锁就是在操作数据时,认为此操作会出现数据冲突,所以在进行每次操作时都要通过获取锁才能进行对相同数据的操作,这点跟java中的synchronized很相似,所以悲观锁需要耗费较多的时间。另外与乐观锁相对应的,悲观锁是由数据库自己实现了的,要用的时候,我们直接调用数据库的相关语句就可以了。

说到这里,由悲观锁涉及到的另外两个锁概念就出来了,它们就是共享锁与排它锁。共享锁和排它锁是悲观锁的不同的实现,它俩都属于悲观锁的范畴。

发表评论

表情:
评论列表 (有 0 条评论,403人围观)

还没有评论,来说两句吧...

相关阅读

    相关 乐观悲观

    这个问题经常在面试中被问到,在此做个记录! 一.乐观锁 ​ 乐观锁就是总是认为事情总是朝着好的方向发展,总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不

    相关 悲观乐观

    锁( locking ) 业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算 处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希

    相关 乐观悲观

    乐观锁和悲观锁 数据库管理系统(DBMS)中的并发控制的是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和一致性以及统一性。 乐观并发控制(乐观锁)和悲观并

    相关 悲观乐观

    1、悲观锁:    顾名思义,每次读取数据库的数据时,都假设会被它人修改,因此要加锁将数据锁住,防止被修改。   可以依靠数据库实现,如行锁、读锁和写锁等,都是在操作之前加

    相关 悲观乐观

    这是一篇介绍悲观锁和乐观锁的入门文章。旨在让那些不了解悲观锁和乐观锁的小白们弄清楚什么是悲观锁,什么是乐观锁。不同于其他文章,本文会配上相应的图解让大家更容易理解。通过该文,你