读锁案例讲解|学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 快速学习读锁案例讲解

开发者学堂课程【MySQL 高级应用 - 索引和锁读锁案例讲解】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/598/detail/8631


读锁案例讲解


一、表锁的定义

表锁(偏读):把整张表锁了

特点:偏向 MyISAM 存储引擎,开销小,加锁快;无死锁;锁定粒度大,打算锁冲突的概率最高,并发度最低。

建表插数据

Mysql>select*from my lock

//lock这张表有 id name 两个部分

id    name

1      a

2      b

3      c

4      d

5      e

5 rows in set (0.00 sec)

Creat table 建表 lock table 锁表

接下来我们也通过人工来锁表,备份的同时希望这个记录不动

1、【表级锁分析--建表 SQL
create table mylock (

id int not null primary key auto_increment,

name varchar(20)
)engine myisam;
insert into mylock(name) values(“a”);

insert into mylock(name) values(“b”);

insert into mylock(name) values(“c”);

insert  into  mylock(name) values(“d);

insert into mylock(name) values(“e”);
select * from mylock;

建立 session-1session-2 两个终端连接到 linux

2、【手动增加表锁】

Lock table 表名字 readwrite,表名字2readwrite),其它;

locktable 加锁 unlocktable 解锁

read 锁为共享锁,能读自己,不能修改自己,不可以读别人

3、【查看表上加过的锁】

Show open tables// 查看锁的命令,如下图运行所示

Inuse 都为0,证明没有锁

image.png

那么我们现在要上一个锁,代码如下:

Mysql> lock table mylock read,book write;

//给 mylock 上一个读锁,book 上一个写锁,运行结果如下图:

mylock 以及 book 对应的 in_use 1,证明加了一把锁

image.png

Mysql> unlock  tables;

//释放锁运行结果如下图:

Mysql>  show open table

//使用命令再次查询锁,此时

in_use 为0,那么证明此时已经解锁

image.png


二、读写锁对数据操作和系统操作有哪些影响

Session-1加锁过程

Mysql>lock table my lock read;

Quert OK, 0 rows affected (0.00 sec)

Mysql> lock table mylock read:

Query OK, 0 rows affected(0.00  sec)

Mysql> select*from my lock;

id   name

1     a

2     b

3     c

4     d

5     e

5 rows in set (0.00 sec)

Mysql> update mylock set name=‘a2 where id =1

ERROR 1099 (HY000):Table’mylock was locked with a READ lock and can’t be updated

Lock and can’t be updated

Mysql>select * from book;

//读别的表,是不行的

ERROR 1100(HY000):Tablem‘book was not locked  with LOCK TABLES

//主从复制 lock 目前是锁着的状态,只有把别的锁解锁后才可以继续使用。

Mysql>unlock tables;

//解锁 mylock

Query ok,0 rows affected (0.00 sec)

Session-2加锁过程

Mysql>select*from my lock;

id   name

1     a

2     b

3     c

4     d

5     e

5 rows in set (0.01 sec)

Mysql> select * from  mylock;

id   name

1     a

2     b

3     c

4     d

5     e

5 rows in set (0.00 sec)

Mysql>select * from book;

Mysql> update mylock set name=‘a3 where id =1

//读锁共享,此时 mylock 锁着的状态,执行状态如下:

Query OK,1 row affected4541 sec

Rows matched: 1 Changed: 1  Warning: 0

我们为 mylock 表加 read 锁(读阻塞与例子)


三、session_1和session_2对比

Session_1 和 session_2需要对比查看 session_1.1对应

session_2.1

Session_1

1、获得表 mylock READ 锁定

Mysql>lock table mylock read;

Query ok,0 rows affected (0.00 sec)

2、当前 session 可以查询该表记录  

Mysql>selcet * from mylock;

id    name

1      a

2      b

3      c

4      d

5      e

5 rows in set (0.00 sec)

3、当前 session 不能查询其他没有锁定的表

Mysql>select * from book;

Error 1100(HY000):table ‘book’ was not locked with lock tables

4、当前 session 中插入或者更新锁定的表都会提示错误

Mysql>select * from mylock;

id    name

1      a

2      b

3      c

4      d

5      e

5 rows in set (0.00 sec)

运行结果如图所示:

image.png

5、释放锁

Mysql>unlock tables;

Query ok,0 rows affected (0.00 sec)

Session_2

1、链接终端

2、其他 session 也可以查询该表的记录

Mysql>selcet * from mylock;

id    name

1      a

2      b

3      c

4      d

5      e

5 rows in set (0.00 sec)

3、其他 session 可以查询或者更新未锁定的表

Query OK,1 row affected0.02 sec

Rows matched: 1 Changed: 1  Warning: 0

Mysql>select * from staffs;

image.png

4、其他 session 插入或者更新锁定表会一直等待得锁;

Mysql >insert into mylock(name) values(‘e’);

5、Session2获得锁,插入操作完成

Mysql> insert into mylock(name) values(‘e’);

Query ok, 1 row affected (9 min 22.45 sec)

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
11月前
|
存储 JSON 监控
微服务链路追踪原理,一文搞懂!
本文重点讲解微服务链路追踪(Microservices Distributed Tracing),介绍其原理、架构及工作流程。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
微服务链路追踪原理,一文搞懂!
|
传感器 算法 安全
蓝牙中频率跳变技术的原理及其应用
蓝牙中频率跳变技术的原理及其应用
870 9
|
11月前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
105543 10
|
11月前
|
机器学习/深度学习 人工智能 算法
深度学习和强化学习有什么区别呢
【10月更文挑战第23天】深度学习和强化学习有什么区别呢
|
调度 C++
PV操作知识点
PV操作知识点
670 1
|
Java Spring 容器
深入理解@EnableAspectJAutoProxy的力量
深入理解@EnableAspectJAutoProxy的力量
677 0
|
API 芯片
STM32 使用HAL库调试内部RTC经验总结
STM32 使用HAL库调试内部RTC经验总结
1007 1
|
测试技术 运维
并发模式与 RPS 模式之争,性能压测领域的星球大战
本文是《如何做好性能压测》系列专题分享的第四期,该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论体系,并提供有例可依的实战。
13111 118
|
Java 测试技术 Maven
SpringCloud项目编译打包执行单元测试(修复单元测试数量为0)-流水线sonarqube扫描jacoco插件展示覆盖率
SpringCloud项目编译打包执行单元测试(修复单元测试数量为0)-流水线sonarqube扫描jacoco插件展示覆盖率
|
Kubernetes 数据安全/隐私保护 容器
k8s kubesphere 部署 harbor私服仓库
k8s kubesphere 部署 harbor私服仓库