首页 > 数据库 >Mysql的锁

Mysql的锁

时间:2022-09-05 22:58:33浏览次数:70  
标签:行级 事务 加锁 InnoDB Mysql 共享 表级

参考

B站UP主 我是大彬呀

Mysql都有哪些锁

按锁的粒度分:

  1. 行级锁

  2. 页级锁

  3. 表级锁

按锁的级别分类:

  1. 共享锁

  2. 排他锁

  3. 意向锁

行级锁

含义

mysql中锁定粒度最细的一种锁。表示只针对当前操作的行进行加锁操作

优缺点

行级锁能大大减少数据库操作的冲突,其中加锁力度最小,但是加锁的开销也是最大的

页级锁

含义

页级锁是mysql中锁定粒度介于行级锁和表级锁中间的一种锁

优缺点

表级锁速度快,但是冲突多,行级锁冲突多,但是速度慢。因此,才用了折中的页级锁,一次锁定相邻的一组记录

表级锁

含义

mysql中锁定粒度最大的一种锁,表示当前操作的整张表加锁

优缺点

实现简单,资源消耗较少,被大部分mysql引擎支持。最常使用的MyISAM与InnoDB都支持表级锁定

共享锁

含义

共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有的共享锁

排他锁

含义

排他锁又称写锁、独占锁,如果事务T对数据A加上了排他锁之后,则其他事务不能再对数据A加任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。

意向锁

含义

意向锁是表级锁,其设计的主要目的是为了在一个事务中揭示下一行将要被请求锁的类型。InnoDB中的两个表锁:

  1. 意向共享锁(IS)

表示事务准备将数据行加入共享锁,也就是说一个数据行加共享锁前必须去的该表的IS锁

  1. 意向排他锁(IX)

表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他锁之前必须取得该表的IX锁

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

对于INSERT、UPDATE和DELETE,InnoDB会自动给涉及到的数据加入排他锁。

对于一般的SELECT语句,InnoDB不会加任何锁。

事务可以通过下面的语句显示加共享锁或者排他锁:

  1. 共享锁:SELECT ... LOCK IN SHARE MODE;

  2. 排他锁:SELECT ... FOR UPDATE;

标签:行级,事务,加锁,InnoDB,Mysql,共享,表级
From: https://www.cnblogs.com/zhaoxu46/p/16659922.html

相关文章

  • 浅析mysql报错:Error writing file '/tmp/MY4QWdUa' (Errcode: 28 - No space left on
    一、问题背景1、报错描述:今天执行sql时发现Node服务的日志报错:SequelizeDatabaseError:EE_WRITE:Errorwritingfile'/tmp/MY4QWdUa'(Errcode:28-Nospac......
  • mysqldump的简单用法
    1.单个数据库备份,必须在系统命令行环境运行mysqldump-uusername–ppassword--default-character-set=utf8databasename>dumpfile-u用户名,有空格;-p后面是数据库密......
  • mysql 锁
    锁分为独占锁与共享锁锁的粒度有 表锁,行锁,意向锁重点:行级锁(记录锁)类型:RecordLocks:普通记录锁GapLocks:间隙锁,由于普通记录锁无法锁住不存在的数据,所以提出......
  • MySQL8.0使用GROUP BY的问题
    当使用groupby的语句中,select后面跟的列,在groupby后面没有时,会报以下错误:Expression#2ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggregatedcolumn......
  • MySQL入门基础(3)
    DML和DDL补充insert插入多条语句insertinto表名(字段1,字段2)values(值1,值2),(值3,值4),...,()快速创建表将查询的结果当作成新的表createtablexxasselect*fro......
  • windows安装MySQL卡在--connect to server的界面上输入密码显示connection failed
    问题安装MySQL是,在‘ConnectToSever’界面,输入密码,点击‘check’,总是失败。接上篇:windows安装mysql时一直卡在startingtheserver这一位置,解决办法-天军-博客园(cn......
  • php8.0源码编译安装mysqli拓展
    将开发环境web项目上传到CentOS8.0云服务器上后,调用PHP文件报500错误,经排查php环境中不存在mysqli拓展,导致无法使用mysqli_connect()函数;查看phpinfo()页面证实猜想;原因可......
  • windows安装mysql时一直卡在starting the server这一位置,解决办法
    安装mysql时一直卡在startingtheserver这一位置,解决办法:1:保持住这个页面,不用叉掉从装2:计算机—>右键—>管理。找到mysql3:右键—>属性—>登录4:点击允许服务于桌面......
  • MySQL 行锁观察模式8.0
    全新的MySQL8.0新增了全新的锁观测方式,在performance_schema下新增了data_locks表和data_lock_waits表mysql>showtableslike'%data_lock%';+-----------------------......
  • Docker基础知识 (9) - 使用 Docker 部署 Nginx + PHP + MariaDB(MySQL)并配置 phpMyAdmi
    1.部署PHP   1)部署环境       IP地址(本地测试环境):192.168.0.10       操作系统:LinuxCentOS7.9           Docker版本:20.10.7......