mysql进阶(七)数据库锁

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 什么是锁?对数据操作的类型:1.表锁:偏向myISAM存储引擎,开销小,加锁块;无思索;锁定粒度大,发生锁冲突的概率最高,并发度最低;读锁:共享读操作,但是不能进行写操作-- 给表加锁 lock table 表名1 read,表名2 write;-- 查看表的加锁情况show open tables ;-- 解锁unlock tables;写锁:只能写,不能读 如何分析表锁定:可以通过下面状态变量来分析系统上的表锁定。

什么是锁?

对数据操作的类型:

1.表锁:

偏向myISAM存储引擎,开销小,加锁块;无思索;锁定粒度大,发生锁冲突的概率最高,并发度最低;

读锁:共享读操作,但是不能进行写操作


-- 给表加锁
 lock table 表名1  read,表名2 write;
-- 查看表的加锁情况
show open tables ;
-- 解锁
unlock tables;
AI 代码解读

写锁:只能写,不能读

 

如何分析表锁定:

可以通过下面状态变量来分析系统上的表锁定。

 show status like 'table%';
AI 代码解读

 Table_locks_immediate:产生表级锁定的次数,表示可以立即获取锁的查询次数,每立即获取锁值加1;
 Table_locks_waited:出现表级锁定争用而发生等待的次数(不能立即获取锁的次数,每等待一次锁值加1),此值高则说明存在着较严重的表级争用的情况

2.行锁

偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁粒度最小,发生锁冲突的概率最低,并发度也最高。

innodb和myisam最大的不同:是支持事务,采用行级锁

 脏读:

不可重复读:

幻读:

 

事务隔离级别:

 

涉及到的表:

create table test_innodb_lock(a int(11),b varchar(16)) engine=innodb;
insert into test_innodb_lock  values(1,'b2');
insert into test_innodb_lock  values(2,'3');
insert into test_innodb_lock  values(4,'40000');
insert into test_innodb_lock  values(5,'5000');
insert into test_innodb_lock  values(6,'6000');
insert into test_innodb_lock   values(7,'7200');
insert into test_innodb_lock  values(8,'8000');
insert into test_innodb_lock  values(9,'9000');
insert into test_innodb_lock  values(10,'1000');
insert into test_innodb_lock  values(1,'b1');

 create index test_innodb_b_ind on test_innodb_lock(b);
 create index test_innodb_a_ind on test_innodb_lock(a);
AI 代码解读

行锁变成表锁:varchar类型没有加,单双引号;session2阻塞了;

 

间隙锁 

 如何锁定一行:

 

 

行锁的分析:

通过检查innodb_row_lock状态变量来分析系统上的行锁的争夺情况

show status like 'innodb_row_lock%';
AI 代码解读

总结:

 

页锁:

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
2
分享
相关文章
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
245 82
数据库的行级锁与表锁?
表锁: 不会出现死锁,发生锁的冲突几率高,并发性低。 存储引擎在进行SQL数据读写请求前,会对涉及到的表进行加锁。 其中锁分为共享读锁和独占写锁:读锁会阻塞写,写锁会阻塞读和写。 行级锁: 会出现死锁,发生锁的冲突几率低,并发性高。 InnoDB引擎支持行锁,与Oracle不同,MySQL的行锁是通过索引加载的,也就是说,行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁,此时其它事务无法对当前表进行更新或插入操作。 行级锁注意事项: 行级锁必须有索引才能实现,否则会自动锁全表,那就不是行锁了。 两个事务不能锁同一个索引。 in
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
从 MySQL 到时序数据库 TDengine:Zendure 如何实现高效储能数据管理?
TDengine 助力广州疆海科技有限公司高效完成储能业务的数据分析任务,轻松应对海量功率、电能及输入输出数据的实时统计与分析,并以接近 1 : 20 的数据文件压缩率大幅降低存储成本。此外,taosX 强大的 transform 功能帮助用户完成原始数据的清洗和结构优化,而其零代码迁移能力更实现了历史数据从 TDengine OSS 与 MySQL 到 TDengine 企业版的平滑迁移,全面提升了企业的数据管理效率。本文将详细解读这一实践案例。
43 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
235 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
173 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(五)-存储过程
173 0
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系(3)
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系
238 0
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系(3)