MySql中的悲观锁和乐观锁

红太狼 2022-05-24 23:41 264阅读 0赞

mysql中的锁分为两类:悲观锁和乐观锁

悲观锁:悲观锁的特点是先拿到所在进行业务操作,即“悲观”的认为获取锁是非常有可能失败的,因此要先确保获取锁成功再进行业务操作。通常所说的“一锁二查三更新”即指的是使用悲观锁。通常来讲在数据库上的悲观锁需要数据库本身提供支持,即通过常用的select … for update操作来实现悲观锁。当数据库执行select for update时会获取被select中的数据行的行锁,因此其他并发执行的select for update如果试图选中同一行则会发生排斥(需要等待行锁被释放),因此达到锁的效果。select for update获取的行锁会在当前事务结束时自动释放,因此必须在事务中使用。

注意:不同的数据库对select for update的支持是不一样的。Oracle数据库中select for update no wait表示拿不到锁就会报错而不是等待,mysql数据库则没有no wait但是mysql数据库如果长时间拿不到锁也会报错。

mysql数据库使用select for update的时候如果不指定索引,则会对整个表进行锁定,指定就是对本行数据进行锁定。

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

乐观锁的实现基本不需要数据库的支持,再表加一个字段表示当前版本号,在每次跟新的时候版本号+1,判断当前数据库版本是否是之前所读取的版本。














id name version
1 张三 1

update set name=newName,version = newVersion where version=oldVersion

发表评论

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

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

相关阅读

    相关 悲观乐观

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

    相关 MySQL悲观乐观

    悲观锁(即悲观并发控制)和乐观锁(即乐观并发控制)是数据库系统中并发控制主要采用的技术手段。针对不同的业务场景,应该选用不同的并发控制方式。 注意: 不要把它们和数据库中提供

    相关 mysql悲观乐观

    1.需求分析     项目上线后,在并发的情况,数据库会插入重复的记录;在这种情况,mysql的悲观锁或乐观锁可以用来实现代码逻辑的并发控制。  2.悲观锁 ①悲

    相关 MySql悲观乐观

    mysql中的锁分为两类:悲观锁和乐观锁 悲观锁:悲观锁的特点是先拿到所在进行业务操作,即“悲观”的认为获取锁是非常有可能失败的,因此要先确保获取锁成功再进行业务操作。通常所

    相关 悲观乐观

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

    相关 悲观乐观

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