mysql锁的类型_门锁分类及特点

mysql锁的类型_门锁分类及特点基于锁的属性分类:共享锁、排他锁。 基于锁的粒度分类:行级锁(INNODB)、表级锁(INNODB、MYISAM)、页级锁(BDB引擎 )、记录锁、间 隙锁、临键锁。 基于锁的状态分类:意向共享锁、意

Mysql 锁的类型

基于锁的属性分类:共享锁、排他锁。
基于锁的粒度分类:行级锁(INNODB)、表级锁(INNODB、MYISAM)、页级锁(BDB引擎 )、记录锁、间
隙锁、临键锁。
基于锁的状态分类:意向共享锁、意向排它锁。

共享锁(Share Lock)

共享锁又称读锁,简称S锁;当一个事务为数据加上读锁之后,其他事务只能对该数据加读锁,而不能对 数据加写锁,直到所有的读锁释放之后其他事务才能对其进行加持写锁。共享锁的特性主要是为了支持 并发的读取数据,读取数据的时候不支持修改,避免出现重复读的问题。

**排他锁(eXclusive Lock) **

排他锁又称写锁,简称X锁;当一个事务为数据加上写锁时,其他请求将不能再为数据加任何锁,直到该 锁释放之后,其他事务才能对数据进行加锁。排他锁的目的是在数据修改时候,不允许其他人同时修 改,也不允许其他人读取。避免了出现脏数据和脏读的问题。

表锁

表锁是指上锁的时候锁住的是整个表,当下一个事务访问该表的时候,必须等前一个事务释放了锁才能 进行对表进行访问; 特点: 粒度大,加锁简单,容易冲突;

行锁

行锁是指上锁的时候锁住的是表的某一行或多行记录,其他事务访问同一张表时,只有被锁住的记录不 能访问,其他的记录可正常访问; 特点:粒度小,加锁比表锁麻烦,不容易冲突,相比表锁支持的并发要高;

记录锁(Record Lock)

记录锁也属于行锁中的一种,只不过记录锁的范围只是表中的某一条记录,记录锁是说事务在加锁后锁 住的只是表的某一条记录。 精准条件命中,并且命中的条件字段是唯一索引 加了记录锁之后数据可以避免数据在查询的时候被修改的重复读问题,也避免了在修改的事务未提交前 被其他事务读取的脏读问题。

页锁

页级锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突 少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。 特点:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般

间隙锁(Gap Lock)

属于行锁中的一种,间隙锁是在事务加锁后其锁住的是表记录的某一个区间,当表的相邻ID之间出现空 隙则会形成一个区间,遵循左开右闭原则。 范围查询并且查询未命中记录,查询条件必须命中索引、间隙锁只会出现在REPEATABLE_READ(重复 读)的事务级别中。 触发条件:防止幻读问题,事务并发的时候,如果没有间隙锁,就会发生如下图的问题,在同一个事务 里,A事务的两次查询出的结果会不一样。 比如表里面的数据ID 为 1,4,5,7,10 ,那么会形成以下几个间隙区间,-n-1区间,1-4区间,7-10 区间,10-n区间 (-n代表负无穷大,n代表正无穷大)

临建锁(Next-Key Lock)

也属于行锁的一种,并且它是INNODB的行锁默认算法,总结来说它就是记录锁和间隙锁的组合,临键锁 会把查询出来的记录锁住,同时也会把该范围查询内的所有间隙空间也会锁住,再之它会把相邻的下一 个区间也会锁住 触发条件:范围查询并命中,查询命中了索引。 结合记录锁和间隙锁的特性,临键锁避免了在范围查询时出现脏读、重复读、幻读问题。加了临键锁之 后,在范围区间内数据不允许被修改和插 入。
如果当事务A加锁成功之后就设置一个状态告诉后面的人,已经有人对表里的行加了一个排他锁
了,你们不能对整个表加共享锁或排它锁了,那么后面需要对整个表加锁的人只需要获取这个状态
就知道自己是不是可以对表加锁,避免了对整个索引树的每个节点扫描是否加锁,而这个状态就是

意向锁。

意向共享锁
当一个事务试图对整个表进行加共享锁之前,首先需要获得这个表的意向共享锁。

意向排他锁

当一个事务试图对整个表进行加排它锁之前,首先需要获得这个表的意向排它锁。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6054.html

(0)
上一篇 2023-04-18
下一篇 2023-04-18

相关推荐

  • Python实现字符串比较

    Python实现字符串比较在日常开发中,字符串比较是一个很常见的操作。Python内置了很多用于字符串比较的方法和函数,本文将从多个方面对Python实现字符串比较做详细的阐述。

    2024-06-03
    48
  • 利用Python实现高效搜索引擎

    利用Python实现高效搜索引擎随着互联网行业的发展,信息海量化的问题越来越凸显,如何找到所需信息成为每个人都需要解决的问题。搜索引擎应运而生,通过检索网页、文本、图片、视频等内容,帮助用户找到心仪的信息。本文将介绍如何使用Python编写一个高效的搜索引擎。

    2024-02-14
    102
  • 关于Explain

    关于Explain最近在对sql进行性能优化因此对explain相关的知识进行一个简单的整理归纳。 EXPLAIN: 为SELECT语句中使用到的每个表返回一条 SELECT 执行的详细信息;按照M

    2023-02-09
    160
  • Python转义字符详解

    Python转义字符详解在Python编程中,转义字符是经常用到的一个特性。转义字符是以反斜杠符号(\)加上特殊的字母来表示的。通过转义字符,我们可以将一些特殊字符表示出来,使得字符串的表现更加丰富,也可以避免一些特殊字符出现时所带来的错误。

    2024-08-05
    35
  • mysql cpu 占用100%

    mysql cpu 占用100%https://blog.csdn.net/u011239989/article/details/72863333 expain ref: 表示查询所使用的访问类型,type的值主要有八种,该值表示…

    2023-04-05
    159
  • python的json应用的简单介绍

    python的json应用的简单介绍import json,time  

    2023-11-20
    113
  • 麒麟820 荣耀30s_麒麟可以随便买吗

    麒麟820 荣耀30s_麒麟可以随便买吗 荣耀30S发布已经有一段时间,自始至终这款手机的焦点都是在麒麟820处理器上,那么这款处理器对荣耀30S和荣耀手机在哪些方面有影响呢?   首先从时间节点上看,荣耀30S是荣耀2020的开年之作,…

    2023-02-22
    143
  • mysql清空表中数据_怎么删除mysql表中的一列

    mysql清空表中数据_怎么删除mysql表中的一列删除表信息的方式有两种 : truncate table table_name; delete * from table_name; 注 : truncate操作中的table可以省略,delete…

    2023-03-27
    145

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注