首页 > 数据库 >【ⓂMySQL】行级锁(索引项加锁)

【ⓂMySQL】行级锁(索引项加锁)

时间:2023-05-18 09:11:43浏览次数:38  
标签:行级 加锁 行锁 使用 索引 InnoDB MySQL

InnoDB行锁是通过给索引上的索引项加锁来实现的。所以,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁。其他注意事项:

  • 在不通过索引条件查询的时候,InnoDB使用的是表锁,而不是行锁。
  • 由于MySQL的行锁是针对索引加的锁,不是针对记录加的锁,所以即使是访问不同行的记录,如果使用了相同的索引键,也是会出现锁冲突的。
  • 当表有多个索引的时候,不同的事务可以使用不同的索引锁定不同的行,另外,不论是使用主键索引、唯一索引或普通索引,InnoDB都会使用行锁来对数据加锁。
  • 即便在条件中使用了索引字段,但具体是否使用索引来检索数据是由MySQL通过判断不同执行计划的代价来决定的,如果MySQL认为全表扫描效率更高,比如对一些很小的表,它就不会使用索引,这种情况下InnoDB将使用表锁,而不是行锁。因此,在分析锁冲突时,别忘了检查SQL的执行计划,以确认是否真正使用了索引。

隐式加锁

InnoDB自动加意向锁。

对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);

对于普通SELECT语句,InnoDB不会加任何锁;

显式加锁

共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE

排他锁(X) :SELECT * FROM table_name WHERE ... FOR UPDATE

 

标签:行级,加锁,行锁,使用,索引,InnoDB,MySQL
From: https://www.cnblogs.com/xfeiyun/p/17410889.html

相关文章

  • MySQL基础巩固
    selectdistinctuniversityfromuser_profile;--distinct去重 selectdevice_idfromuser_profilelimit0,2ViewCodeselectdevice_idfromuser_profileWHEREid=1orid=2;--取出固定值的两种方式 selectdevice_idasuser_infos_example......
  • MySQL-索引
    索引原理索引是对数据库表中一列或多列的值进行排序的一种结构索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始,然后读完整个表直到它找出相关的行。表越大,花费时间越多。对于一个有序字段,可以运用二分查找(BinarySearch),这就是为什么性......
  • MySQL中的索引
    MySQL中常见的索引InnoDB存储引擎支持以下几种常见的索引:B+树索引、全文索引、哈希索引,其中比较关键的是B+树索引。一、B+树索引InnoDB中的索引按照B+树来组织的,数据都存放在B+树(为了快速检索数据而提出的一种数据结构)的叶子节点中。聚集索引/聚簇索引InnoDB中使用了聚集索引,就是将......
  • Python 连接 MySQL 数据库
    在实际数据分析和建模过程中,我们通常需要从数据库中读取数据,并将其转化为Pandasdataframe对象进行进一步处理。而MySQL数据库是最常用的关系型数据库之一,因此在Python中如何连接MySQL数据库并查询数据成为了一个重要的问题。本文将介绍两种方法来连接MySQL数据库,并将......
  • 2022-2023年大二上mysql学习汇总
    CRUD等操作(DDL、DML、DQL)权限操作:createuser用户名@"localhost或%" identifiedby'密码'  showgrantsfor用户名@主机名 grant权限列表(all/insert/delete/select等)on库名(*).表名(*)to用户名@主机名  remove与授予一样函数:内置(后面加as......
  • PHP+MySql+jQuery实现的“顶”和“踩”投票功能
    当我们浏览网页时,我们想对网页内容如文章、评论中的观点持赞同或反对意见时,可以通过点击网页中的“顶”和“踩”来进行投票。而整个交互过程,开发者可以通过ajax异步来实现,从而提高用户体验。 本文结合实例,讲解使用PHP+MySql+jQuery实现的“顶”和“踩”投票功能,通过记录用户IP,判断......
  • Scrapy将数据存入excel和MySQL数据库中
    一:Scrapy将爬到的数据存入MySQL数据库中1.导入pymysql第三方库pipinstallpymysql2.连接数据库(itempipeline.py)实现数据库的连接一般分为三个步骤:建立连接,操作数据,提交事务,关闭数据库。基本方法如下:classSpider01Pipeline:#连接数据库def__init__(self):......
  • MySQL远程登录的设置
    ​MySQL远程登录的设置在云平台上安装了MySQLdocker环境后,需要进行远程登录的设置。MySQL镜像为8.0(8.0以下的设置有一些区别),数据库用户为root。mysql-uroot-p(输入初始密码登录123456)#createuserroot@'%'identifiedby'cloudSpring091845@#';updateusersethost......
  • MySQL远程登录的设置
    ​MySQL远程登录的设置在云平台上安装了MySQLdocker环境后,需要进行远程登录的设置。MySQL镜像为8.0(8.0以下的设置有一些区别),数据库用户为root。mysql-uroot-p(输入初始密码登录123456)#createuserroot@'%'identifiedby'cloudSpring091845@#';updateusersethost......
  • mysql只有frm和ibd文件下如何恢复(表引擎为innodb)
    环境:OS:Centos7DB:mysql5.6说明:主库已经无法启动,表的引擎为innodb下面操作是在新服务器安装与原库同版本的db下进行 ###################已知表结构的情况######################1.创建同结构的表CREATETABLE`ad`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`......