MySQL悲观锁和乐观锁的区别是什么

区别如下:

1、概念不同

乐观锁( Optimistic Locking):

顾名思义,对加锁持有一种乐观的态度,即先进行业务操作,不到最后一步不进行加锁,"乐观"的认为加锁一定会成功的,在最后一步更新数据的时候再进行加锁。

悲观锁(Pessimistic Lock):

正如其名字一样,悲观锁对数据加锁持有一种悲观的态度。因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。

2、实现方式不同

乐观锁:

version方式:一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也会读取version值,在提交更新时,若刚才读取到的version值为当前数据库中的version值相等时才更新,否则重试更新操作,直到更新成功。

悲观锁:

是由数据库自己实现的,要用的时候,我们直接调用数据库的相关语句就可以了(原理:共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程),如行锁、读锁和写锁等,都是在操作之前加锁,在Java中,synchronized的思想也是悲观锁。

3、使用场景不同

乐观锁:

比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。

悲观锁:

比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。

4、特点不同

乐观锁:

乐观锁的特点先进行业务操作,不到万不得已不去拿锁。即“乐观”的认为拿锁多半是会成功的,因此在进行完业务操作需要实际更新数据的最后一步再去拿一下锁就好。

悲观锁:

悲观锁的特点是先获取锁,再进行业务操作,即“悲观”的认为获取锁是非常有可能失败的,因此要先确保获取锁成功再进行业务操作。通常所说的“一锁二查三更新”即指的是使用悲观锁。

mysql悲观锁和乐观区别_MySQL悲观锁和乐观锁的区别是什么相关推荐

  1. mysql锁总结知乎_Mysql悲观锁乐观锁区别与使用场景

    概念上区别 乐观锁(Optimistic Locking):顾名思义,对加锁持有一种乐观的态度,即先进行业务操作,不到最后一步不进行加锁,"乐观"的认为加锁一定会成功的,在最后一步 ...

  2. mysql社区版与cluster 区别_MySQL版本Enterprise/Community/Cluster等版本的区别

    MySQL分为多种版本如Community.Enterprise.Cluster和Workbench等,MySQL不同版本有什么区别?LAMPLNMP分享: MySQL版本区别 ● MySQL Com ...

  3. mysql数据库的行级锁有几种_MySQL中的行级锁、表级锁、页级锁

    在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎).表级锁(MYISAM ...

  4. mysql可能锁的表命令_mysql 默许是表级锁一些不太常用命令

    mysql 默认是表级锁一些不太常用命令 1,mysql默认的是表级锁.如果是启用InnoDB存储引擎那么该数据库支持行级锁. 2,查看数据库是否支持innodb的命令 SHOW variables ...

  5. mysql社区版与cluster 区别_MySQL版本Enterprise/Community/Cluster有何区别

    MySQL版本Enterprise/Community/Cluster有何区别 发布时间:2020-05-28 14:23:34 来源:PHP中文网 阅读:278 作者:三月 下面讲讲关于MySQL版 ...

  6. mysql企业版集群版区别_MySQL版本Enterprise/Community/Cluster等版本的区别

    MySQL分为多种版本如Community.Enterprise.Cluster和Workbench等,MySQL不同版本有什么区别?LAMPLNMP分享: MySQL版本区别 ● MySQL Com ...

  7. mysql 虚读幻读区别_MySQL脏读、虚读、幻读

    事务的特性: 原子性:指处于同一个事务中的多条语句是不可分割的. 一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态.比如转账,转账前两个账户余额之和为2k,转账之后也应该是2K. 隔离 ...

  8. java锁对象的区别吗_Java中对象级别锁和类级别锁之间的区别

    在多线程环境中,两个或多个线程可以同时访问共享资源,这可能导致系统行为不一致.Java使用锁的概念来限制对共享资源或对象的并发访问.锁可以应用于两个级别-对象级锁-当您希望非静态方法或非静态代码块仅应 ...

  9. mysql复合主键的区别_MySQL 的联合主键与复合主键区别

    MySQL 的联合主键与复合主键区别 复合主键就是指你表的主键含有一个以上的字段组成 . 例如; create table test ( name varchar(19), id number, va ...

最新文章

  1. ProtoBuf使用笔记
  2. Nvidia TX2 安装中文输入法
  3. thinkphp mysql desc table_Thinkphp 连接数据库、查询、添加
  4. DPDK — TestPMD
  5. (C/C++学习)6.数组指针和指针数组
  6. 手持GPS坐标系统的转换与应用
  7. Android轮播图实现图片圆角,Android开发实现图片圆角的方法
  8. JVM学习笔记之-JVM性能监控-JVM监控及诊断工具-命令行方式
  9. Matplotlib学习---用matplotlib画误差线(errorbar)
  10. 7-3 银行排队问题之单队列多窗口服务 (25 分)
  11. linux tbb 安装_Ubuntu18.04 GCC9 安装
  12. java里类包含对象对不对_Java类中的对象
  13. Linux环形缓冲区原理
  14. [android]亲自破解Flappy Bird(去广告+永生)
  15. idea 配置 maven 和 镜像
  16. 1.性能之巅 洞悉系统、企业与云计算 --- 绪论
  17. Godot3游戏引擎入门之十:介绍一些常用的节点并开发一个小游戏(中)
  18. JavaScript使用计时事件制作的电子时钟
  19. win7 远程桌面连接
  20. 中国的铁路订票系统在世界上属于什么水平?

热门文章

  1. JVM配置参数-X与-XX的区别
  2. 数学烂也要学AI | 带你造一个经济试用版AI终极必杀器
  3. win10打印机共享,提示操作无法完成(0X00000709)问题解决
  4. Postgresql 条件表达式
  5. 浏览器服务器运行模式,浏览器服务器模式的概念—
  6. Flink---键控状态(keyed state)
  7. 基金api接口 实时数据
  8. jquery冲突的关键字nodeName、nodeValue和nodeType!
  9. BP网络逼近仿真实例详解
  10. hive sql 根据出生日期计算年龄(闰年同样准确)