热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mysql行级锁无索引时变表级锁,真的是这样吗?实测

最近学习Mysql时,发现网上往往说行级锁没有使用索引时会转为表级锁,原因是Mysql行级锁是给索引加锁。但事实真的是这样吗?自己测试了下

最近学习Mysql时,发现网上往往说行级锁没有使用索引时会转为表级锁,原因是Mysql行级锁是给索引加锁。但事实真的是这样吗?自己测试了下,发现了一些问题

经测试

测试用表:
employees(
id INT(11)
NAME VARCHAR(15))无索引

session1
begin;
select *
from employees
where id =1 lock in share mode;

session2
begin;
update employees
set name = ‘tom’
where id =2;

运行后session2阻塞,似乎确实是表锁。

进行更多测试:
session1
begin;
select *
from employees
where id =1 lock in share mode;
update employees
set name = ‘tom’
where id =2;

有趣的事情发生了,这里修改成功了。

附上一个表级锁的特性的表格:
在这里插入图片描述
这个表应该没啥异议吧,大概。。。

显然,这里不符合表级S锁自己不可写的特性。
另外用lock tables table_name read 加锁测试确实不能写。
测试到这里,我猜测是每一行加了行锁。

进一步证明:
MySQL8.0删除了information_schema.INNODB_LOCKS,添加了performance_schema.data_locks ,这个表能看到事务所持有的锁,那就看看吧。

在8.0中运行以下语句
SELECT * FROM performance_schema.data_locks

结果是大量的行锁(数目和记录数一致),OK,问题结束,没有索引时加行锁会转变成给每一行都加行锁。(其实用快照读也能测出来和lock tables的不一致)

本人Java初学者,测试仅根据自己浅薄的知识,如果有问题,希望大佬们多多批评指正。


推荐阅读
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文介绍如何使用JPA Criteria API创建带有多个可选参数的动态查询方法。当某些参数为空时,这些参数不会影响最终查询结果。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 华为USG基于源地址的多出口策略路由配置
    网络拓扑如下:组网情况:企业用户主要有技术部(VLAN10)和行政部(VLAN20),通过汇聚交换机连接到USG。企业分别通过两个不同运营商(ISP1和ISP2)连接到 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 本文探讨了在Django项目中,如何在对象详情页面添加前后导航链接,以提升用户体验。文章详细描述了遇到的问题及解决方案。 ... [详细]
author-avatar
mobiledu2502884677
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有