God_zmd
God_zmd
采纳率100%
2021-03-08 09:54

悲观锁和乐观锁是不是mysql数据库默认带的锁

悲观锁和乐观锁是不是mysql数据库默认带的锁

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • qq_27471405 小小鱼儿小小林 1月前

    mysql的锁分类
    从性能上分为乐观锁(用版本对比来实现)和悲观锁
    从对数据库操作的类型分,分为读锁和写锁 (都属于悲观锁)
    读锁(共享锁,S锁(Shared)):针对同一份数据,多个读操作可以同时进行而不会互相影响
    写锁(排它锁,X锁(eXclusive)):当前写操作没有完成前,它会阻断其他写锁和读锁
    从对数据操作的粒度分,分为表锁和行锁

    点赞 评论 复制链接分享
  • weixin_41830716 规则边缘 1月前

    1. 锁机制主要是针对读写操作的原子性。

    2. 假设有两个事务执行同样的操作,读取数据、对数据进行处理、写入数据。事务A执行{读取数据},切换为事务B执行{读取数据、对数据进行处理、写入数据}。再切回事务A执行{对数据进行处理、写入数据}。就会发现事务A把事务B的操作覆盖掉了。

    3. 悲观锁就是悲观的认为上述冲突发生的概率较高,就是事务在执行{读取数据}操作时,就对【数据】进行{加锁}操作,不允许其它事务去执行{加锁,写入数据}的操作。{加锁}操作是需要耗费资源的,如果冲突发生的概率较低,是不划算的。MySQL的加锁{悲观锁}操作可以通过select .... for update语法实现。

    4. 乐观锁是乐观的认为上述冲突发生的概率较低,就是在表中约定一个版本标志字段,每次变更时去修改这个版本标志(可以是一个递增版本号,也可以是时间戳)。每个事务执行{读取数据}操作时,会读取到这个字段,执行{写入数据}操作时,判断版本标志是否发生改变(通过where条件判断即可),如果有变更,应用程序就重新执行{读取数据、对数据进行处理、写入数据}操作或者退出。MySQL本事是没有乐观锁这个概念的,需要应用程序自己去实现。

    点赞 评论 复制链接分享
  • weixin_45864004 程序猿大波 1月前

    默认的是无状态锁,悲观锁和乐观锁要具体实现

    点赞 评论 复制链接分享
  • qq_37083863 三岁丫 1月前

    悲观锁和乐观锁只是一种概念,不特属某一个语言。mysql 数据库只能说应该用了对应概念的一种实现,mysql 也只是一款应用,你要问也应该问编写 mysql 的语言是不是有对应概念的实现。

    点赞 评论 复制链接分享