mysql中的乐观锁和悲观锁

mysql中的
乐观锁和
悲观锁的简介以及如何简单运用。

操作方法

  • 01

    关于mysql中的乐观锁和悲观锁面试的时候被问到的概率还是比较大的。 mysql的悲观锁: 其实理解起来非常简单,当数据被外界修改持保守态度,包括自身系统当前的其他事务,以及来自外部系统的事务处理,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制,但是也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在自身系统中实现了加锁机制,也无法保证外部系统不会修改数据。 来点实际的,当我们使用悲观锁的时候我们首先必须关闭mysql数据库的自动提交属性,因为MySQL默认使用autocommit模式,也就是说,当你执行一个更新操作后,MySQL会立刻将结果进行提交。

  • 02

    关闭命令为:set autocommit=0; 悲观锁可以使用select…for update实现,在执行的时候会锁定数据,虽然会锁定数据,但是不影响其他事务的普通查询使用。此处说普通查询就是平时我们用的:select * from table 语句。在我们使用悲观锁的时候事务中的语句例如: //开始事务 begin;/begin work;/start transaction; (三选一) //查询信息 select * from order where id=1 for update; //修改信息 update order set name='names'; //提交事务 commit;/commit work;(二选一) 此处的查询语句for update关键字,在事务中只有SELECT ... FOR UPDATE 或LOCK IN SHARE MODE 同一条数据时会等待其它事务结束后才执行,一般的SELECT查询则不受影响。

  • 03

    执行事务时关键字select…for update会锁定数据,防止其他事务更改数据。但是锁定数据也是有规则的。 查询条件与锁定范围: 1、具体的主键值为查询条件 比如查询条件为主键ID=1等等,如果此条数据存在,则锁定当前行数据,如果不存在,则不锁定。 2、不具体的主键值为查询条件 比如查询条件为主键ID>1等等,此时会锁定整张数据表。 3、查询条件中无主键 会锁定整张数据表。 4、如果查询条件中使用了索引为查询条件 明确指定索引并且查到,则锁定整条数据。如果找不到指定索引数据,则不加锁。 悲观锁的确保了数据的安全性,在数据被操作的时候锁定数据不被访问,但是这样会带来很大的性能问题。因此悲观锁在实际开发中使用是相对比较少的。

  • 04

    mysql的乐观锁: 相对悲观锁而言,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会对数据的冲突与否进行检测,如果发现冲突,则让返回用户错误的信息,让用户决定如何去做。 一般来说,实现乐观锁的方法是在数据表中增加一个version字段,每当数据更新的时候这个字段执行加1操作。这样当数据更改的时候,另外一个事务访问此条数据进行更改的话就会操作失败,从而避免了并发操作错误。当然,还可以将version字段改为时间戳,不过原理都是一样的。 例如有表student,字段: id,name,version 1     a       1 当事务一进行更新操作:update student set name='ygz' where id = #{id} and version = #{version}; 此时操作完后数据会变为id = 1,name = ygz,version = 2,当另外一个事务二同样执行更新操作的时候,却发现version != 1,此时事务二就会操作失败,从而保证了数据的正确性。 悲观锁和乐观锁都是要根据具体业务来选择使用,本文仅作简单介绍。

(0)

相关推荐

  • MySQL 行级锁,表级锁,页级锁

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

  • 如何在小米8手机中设置关闭使用流量准备锁屏壁纸功能

    有些小伙伴的手机流量并不充足,今天小编来教大家节约一些流量,就是如何在小米8手机中设置关闭使用流量准备锁屏壁纸功能具体如下:1. 第一步,选择进入"设置".2. 第二步,选择进入& ...

  • 怎么关闭win10系统中的屏保并将锁屏待机功能禁止

    随着科技的发展,电脑已经成为现代人生活中必不可少的工具,当我们在使用win10系统的电脑时,应该如何关闭屏保并禁止锁屏待机呢?接下来就由小编来告诉大家.具体如下:1.第一步,打开电脑右键点击桌面空白处 ...

  • 怎么在手机qq中取消已设置的指纹锁?

    许多小伙伴在使用手机QQ的时候会设置指纹锁,如果我们想要将这一功能关闭应该如何操作呢?今天,小编就教大家在手机qq中取消已设置的指纹锁.具体如下:1. 首先,我们在手机中将QQ打开,将指纹锁进行输入, ...

  • 如何在微信读书APP中设置阅读时不自动锁屏

    今天给大家介绍一下如何在微信读书APP中设置阅读时不自动锁屏的具体操作步骤.1. 解锁手机后,找到桌面上的微信读书APP,打开2. 进入主页面后,点击右下角的我的选项,在打开的我的页面,点击右上角的设 ...

  • 怎么打开华为手机中的人脸识别智能显示锁屏通知功能

    有的小伙伴在使用华为手机时,为了可以解锁屏幕时看到锁屏通知信息, 因此想要打开人脸识别智能显示锁屏通知功能,但是却不知道如何打开,那么小编就来为大家介绍一下吧.具体如下:1. 第一步,点击并打开设置应 ...

  • 如何在手机版美团中解决未关闭自行车的锁的行程

    手机版美团价软件被很多人使用,用来点外卖等,有的小伙伴在使用该软件时,借了自行车,但是发现忘记关锁了,那么如何关闭行程呢?小编就来为大家介绍一下吧.具体如下:1. 第一步,点击并打开美团软件,接着点击 ...

  • 怎么开启微信读书APP中的阅读时不自动锁屏功能

    相信很多人都在使用微信读书APP,今天给大家介绍一下怎么开启微信读书APP中的阅读时不自动锁屏功能的具体操作步骤.1. 手首先解锁手机,找到桌面上的微信读书APP,打开2. 进入主页面后,点击页面右下 ...

  • 如何使用苹果iPhone手机中的访问限制设置应用锁

    我们在使用iPhone手机的时候,没有安卓手机中的应用锁功能,不过我们可以通过使用其中的访问限制,给一些隐私应用设置应用锁,今天就跟大家介绍一下如何使用苹果iPhone手机中的访问限制设置应用锁的具体 ...