`
haiyupeter
  • 浏览: 425953 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MySql悲观锁和乐观锁的基础理解

 
阅读更多
mysql悲观锁和乐观锁的理解

1、悲观锁
悲观锁顾名思意,全部锁起来

select *from t_order where id=101 or id=102 or id=103 for update
通过for update参数,告诉数据库在读取where条件中的数据时将这些数据全部锁住,禁止任何的读取或者更新操作,其余操作进入block等待,直接锁释放

优点:是能保证数据的一致性
缺点:坏处是所有的查询都必需等待锁的或者,如果查询一多,则数据库连接一直block,连接数较多,有可能导致数据库连接超时

2、乐观锁
乐观锁其实是程序员给悲观锁的另一种叫法,事实上是由程序员自己加逻辑处理

update t_goods set count = count - ${count} where id=1 count > ${count}
相当于在执行update时,count字段作为version字段,则此时可保证更新count时,count的数量一定是大于参数${count}的,保证了最大的运行效率,只有在count > ${count}的时候才真正产生冲突

当然也可以用一个独立的version来作为标识
如,先查出version,执行完成时更新version+1,如version有冲突则执行失败
select (status,status,version) from t_goods where id=#{id}

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

优点:此时一般适用于查询后执行失败的场景,保证查询不受锁的控制
缺点:大并发导致的大规模冲突时会导致较多的失败回滚操作
分享到:
评论

相关推荐

    mysql 悲观锁与乐观锁的理解及应用分析

    悲观锁与乐观锁是人们定义出来的概念,你可以理解为一种思想,是处理并发资源的常用手段。 不要把他们与mysql中提供的锁机制(表锁,行锁,排他锁,共享锁)混为一谈。 一、悲观锁 顾名思义,就是对于数据的处理持悲观...

    SpringBoot整合MyBatis实现乐观锁和悲观锁的示例

    SpringBoot整合MyBatis实现乐观锁和悲观锁的示例 在本文中,我们将学习如何使用SpringBoot和MyBatis来实现乐观锁和悲观锁。我们将通过示例代码来介绍这两种锁的实现方式,帮助读者更好地理解和使用它们。 一、悲观...

    06-VIP-深入理解Mysql事务隔离级别与锁机制.pdf

    锁可以分为乐观锁和悲观锁两种,悲观锁又可以分为读锁和写锁两种。读锁是一种共享锁,允许多个读操作同时进行;写锁是一种排它锁,阻断其他写锁和读锁。 锁分类 锁可以从性能上分为乐观锁和悲观锁,从对数据库操作...

    并发编程下的锁机制,乐观锁、悲观锁、共享锁、排他锁、分布式锁、锁降级原理篇

    本文将详细讲解几种常见的锁机制:悲观锁、乐观锁、共享锁和排他锁,并简要介绍分布式锁以及锁降级原理。 1. **悲观锁**: 悲观锁是一种保守的策略,它假设在读取数据时,数据极有可能被其他线程修改。因此,悲观...

    深入理解Mysql事务隔离级别与锁机制.pdf

    锁可以分为乐观锁和悲观锁。乐观锁是通过版本对比来实现的,悲观锁是通过加锁来实现的。悲观锁可以分为表锁和行锁,表锁是对整个表加锁,行锁是对某一行数据加锁。悲观锁还可以分为读锁和写锁,读锁是共享锁,写锁是...

    MySQL锁的详细介绍

    1.3 从操作的性能可分为乐观锁和悲观锁。 * 乐观锁:一般的实现方式是对记录数据版本进行比对,在数据更新提交的时候才会进行冲突检测,如果发现冲突了,则提示错误信息。 * 悲观锁:在对一条数据修改的时候,为了...

    深入理解Mysql锁与事务隔离级别1

    本文将详细阐述MySQL中的锁机制以及事务的四种隔离级别,以帮助读者更好地理解和应用这些关键概念。 一、锁的概念与分类 1.1 锁的定义 锁是一种用于控制多进程或线程对共享资源访问的同步机制。在数据库中,它...

    mysql中的事务、锁讲解和操作

    4. 从锁的态度分类,有悲观锁和乐观锁。悲观锁假定并发操作会导致冲突,所以在数据读取时立即加锁;乐观锁则假设不会发生冲突,仅在更新数据时检查是否发生冲突。 在实际应用中,根据业务需求和性能考虑,开发人员...

    Mysql 锁机制的详细说明

    - MySQL 的共享锁和排他锁就是悲观锁的实现。 2. 乐观锁: - 假设不会发生冲突,只有在更新数据时检查是否被其他事务修改。 - 通常通过版本号或时间戳实现,MySQL 中没有内置的乐观锁,但可以在应用层面实现。 ...

    深入理解MySQL核心技术 中英文对照

    书中会介绍乐观锁和悲观锁策略,以及死锁检测和避免。 6. 性能优化:MySQL性能优化主要包括查询优化、配置参数调整、索引优化、查询缓存等。书中会提供各种性能监控工具和技巧,帮助读者诊断并解决性能问题。 7. ...

    SQL数据库系统原理(二)———乐观锁与悲观锁、MVCC、范式理论、SQL和NoSQL比较

    在数据库系统中,为了保证数据的一致性和完整性,有多种并发控制策略,其中包括乐观锁和悲观锁。这两种锁机制主要用于解决事务在并发环境中的数据冲突问题。 乐观锁是一种假设事务在执行过程中不会发生冲突的策略。...

    VIP-深入理解Mysql锁与事务隔离级别1

    1. **乐观锁与悲观锁**:乐观锁假设很少发生冲突,所以在读取数据时不加锁,而在写回数据时检查是否发生冲突。而悲观锁则相反,它在读取数据时立即加锁,防止其他事务修改数据。 2. **读锁(共享锁)与写锁(排他锁...

    【课堂笔记】MySQL事务与锁详解.pdf

    - 按加锁的方式分为:乐观锁和悲观锁。 4. 行锁的原理与算法: 行锁是指只对数据库表中某一行记录加锁,MySQL中InnoDB存储引擎支持行锁,其目的是减少锁冲突,提高并发性。行锁的算法通常有: - 记录锁(Record ...

    MySQL与Java锁的学习

    本主题聚焦于“MySQL与Java锁的学习”,这是一门深入理解如何在数据库层(MySQL)和应用层(Java)处理并发问题的关键技能。下面我们将详细探讨MySQL中的锁机制以及Java如何与之协同工作。 **MySQL中的锁** MySQL...

    mysql源码(mysql-8.1.0.tar.gz)

    4. **并发控制**:MySQL使用了乐观锁和悲观锁策略来处理并发问题。源码中可以看到如何实现这些策略,以及InnoDB的锁定算法,如Next-Key Locks和Record Locks。 5. **索引优化**:源码分析可以帮助我们理解B-Tree、...

    MySQL源码学习讲义.rar_MYSQL_mysql 源码

    5. 锁机制:MySQL中的锁用于并发控制,包括表级锁、行级锁、页级锁等,以及乐观锁和悲观锁的概念。 6. 事务管理:MySQL支持ACID特性,即原子性、一致性、隔离性和持久性。InnoDB存储引擎实现了多版本并发控制(MVCC...

    MySQL十种锁,一篇文章带你全解析.doc

    此外,还有根据加锁机制划分的乐观锁和悲观锁。 1. 表锁:在MyISAM和InnoDB引擎中都支持,优点是加锁速度快,开销小,但锁定粒度大,容易造成锁冲突,适用于更新大量数据或涉及多表操作的复杂业务逻辑。 2. 页面锁...

Global site tag (gtag.js) - Google Analytics