首页 > 数据库 >MySQL有哪些锁?

MySQL有哪些锁?

时间:2023-06-20 13:12:17浏览次数:41  
标签:行级 事务 哪些 InnoDB MySQL 共享 锁定 表级

MySQL有哪些锁?

按锁粒度分类,有行级锁、表级锁和页级锁。

  1. 行级锁是mysql中锁定粒度最细的一种锁。表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突,其加锁粒度最小,但加锁的开销也最大。行级锁的类型主要有三类:
    • Record Lock,记录锁,也就是仅仅把一条记录锁上;
    • Gap Lock,间隙锁,锁定一个范围,但是不包含记录本身;
    • Next-Key Lock:Record Lock + Gap Lock 的组合,锁定一个范围,并且锁定记录本身。
  2. 表级锁是mysql中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分mysql引擎支持。最常使用的MyISAM与InnoDB都支持表级锁定。
  3. 页级锁是 MySQL 中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。因此,采取了折衷的页级锁,一次锁定相邻的一组记录。

按锁级别分类,有共享锁、排他锁和意向锁。

  1. 共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。
  2. 排他锁又称写锁、独占锁,如果事务T对数据A加上排他锁后,则其他事务不能再对A加任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
  3. 意向锁是表级锁,其设计目的主要是为了在一个事务中揭示下一行将要被请求锁的类型。InnoDB 中的两个表锁:

意向共享锁(IS):表示事务准备给数据行加入共享锁,也就是说一个数据行加共享锁前必须先取得该表的IS锁;

意向排他锁(IX):类似上面,表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他锁前必须先取得该表的IX锁。

意向锁是 InnoDB 自动加的,不需要用户干预。

 

对于INSERT、UPDATE和DELETE,InnoDB 会自动给涉及的数据加排他锁;对于一般的SELECT语句,InnoDB 不会加任何锁,事务可以通过以下语句显式加共享锁或排他锁。

共享锁:SELECT … LOCK IN SHARE MODE;

排他锁:SELECT … FOR UPDATE;

 

标签:行级,事务,哪些,InnoDB,MySQL,共享,锁定,表级
From: https://www.cnblogs.com/kisshappyboy/p/17493352.html

相关文章

  • mysql flush table的使用
    会话1:selectsleep(500)fromt_biz1where.....会话2:setsessionwait_time_out=5000;flushtableswithlock; 会话3:select*fromt_biz1where....会话4:select*fromt_biz2where....会话5:unlocktables; 要保证会话1的sleep时间大于会话2 会话1执......
  • [ERROR] Aborting 安装mysql5.7报错
    2023-06-20T03:17:11.632401Z0[ERROR]Fatalerror:Can'topenandlockprivilegetables:Table'mysql.user'doesn'texist2023-06-20T03:17:11.632414Z0[ERROR]Fatalerror:FailedtoinitializeACL/grant/timezonesstructuresorfailed......
  • MySQL单表查询练习(条件_模糊_分组_聚合_排序)
    练习所用数据表•部门表CREATETABLEDEPT(DEPTNOINTPRIMARYKEY,–部门编号DNAMEVARCHAR(14),–部门名称LOCVARCHAR(13)–部门地址);INSERTINTODEPTVALUES(10,‘ACCOUNTING’,‘NEWYORK’);INSERTINTODEPTVALUES(20,‘RESEARCH’,‘DALLAS’);......
  • Mysql - 统计数据
    QA统计数据是做什么的?为了解释器在计算代价时,选择最优的方案.这个值如果与实际值差距过大,会导致执行顺序的变更.统计数据有哪些?对表的统计数据-mysql.innodb_table_stats对表索引的统计数据-mysql.innodb_index_stats统计数据存在哪?有两种方式,一种存在磁盘,一种存在......
  • CSS3有哪些新特性
    CSS3引入了很多新特性,比如:1.选择器:CSS3引入了新的选择器,如伪类选择器、伪元素选择器等,使得选择元素更加灵活和精确。2.边框圆角:CSS3允许通过border-radius属性为元素的边框添加圆角,创建圆形、椭圆形或具有不同角度的矩形边框。3.盒阴影:使用box-shadow属性,可以为元素添加......
  • MySql InnoDB 存储引擎表优化
    一、InnoDB表存储优化1、OPTIMIZETABLE适时的使用OPTIMIZETABLE语句来重组表,压缩浪费的表空间。这是在其它优化技术不可用的情况下最直接的方法。OPTIMIZETABLE语句通过拷贝表数据并重建表索引,使得索引数据更加紧凑,减少空间碎片。语句的执行效果会因表的不同而不同。过大......
  • 什么是MySQL
    什么是MySQLMySQL是一个关系型数据库,它采用表的形式来存储数据。你可以理解成是Excel表格,既然是表的形式存储数据,就有表结构(行和列)。行代表每一行数据,列代表该行中的每个值。列上的值是有数据类型的,比如:整数、字符串、日期等等。数据库的三大范式第一范式1NF确保数据库表字段......
  • 宝塔面板中使用Mysql命令快速导入大容量数据库
    在宝塔面板中,文件栏目中打开/www/backup/database文件夹,把我们的数据库上传到此文件夹中。(一般导入的数据库都会上传到这个文件夹,方便以后管理)点击旁边的终端,打开宝塔终端界面。输入账号及密码进入终端管理。(如果忘记密码,在软件商店里面找到Linux工具箱1.4里面可以设置......
  • 获得class对象的方式有哪些?
    获取class对象的方式有哪些?方式一:通过对象获得——已知某个类的实例,调用该实例的getClass()方法获得Class对象ClassaClass1=student.getClass();方式二:.forName获得——已知一个类的全类名,且该类在类路径下,可以通过Class类的静态方法forName()方法获取,但需抛出异常ClassaC......
  • MySQL的卸载、下载、安装详细讲解
    MySQL的卸载、下载、安装、环境变量配置、Navicat安装目录:本文比较长,详细说明了MySQL的卸载、下载、安装、环境变量配置、Navicat安装;顺序以目录为准。一、彻底卸载删除数据库二、下载MySQL数据库三、安装MySQL数据库——3.1,MySQL5.5.49版本的数据库——3.......