Mysql锁机制--读锁
===============
1 准备数据
1.1 建表
1.1.1 建立 Employee表
DROP TABLE IF EXISTS employee;
CREATE TABLE IF NOT EXISTS employee (
id INT PRIMARY KEY auto_increment,
name VARCHAR(40),
dept_id INT
)engine myisam;
1.1.2 建立 Department 表
DROP TABLE IF EXISTS department;
CREATE TABLE IF NOT EXISTS department (
id INT PRIMARY KEY auto_increment,
name VARCHAR(40)
)engine myisam;
1.1.3 注意:上述两张表的存储引擎都是 MyISam
1.2 插入数据
INSERT INTO employee(name, dept_id) VALUES('Alice', 1);
INSERT INTO employee(name, dept_id) VALUES('Bob', 1);
INSERT INTO department(name) VALUES('RD');
2 测试
2.1 给 Employee 表加上读锁
LOCK TABLE employee READ;

2.2 查询 Employee 表
2.2.1 当前会话(终端、命令行窗口)
注意:当前会话是指执行了上面的 LOCK TABLE employee READ 语句的会话(窗口、命令行);在我的例子中,是白色背景。
SELECT * FROM employee;

2.2.2 其它会话(终端、命令行窗口)
注意:新开一个会话窗口;在我的例子中,是黑色背景。

2.2.3 结论
可以看到,加了读锁后,当前会话和其它会话都可以进行读操作,即:读锁对于读操作共享。
2.3 更新 Employee 表
2.3.1 当前会话
UPDATE employee SET name = 'Alice02' WHERE id = 1;

2.3.2 其它会话

结果:被挂起、阻塞(上图)

接下来,在‘当前会话’中执行 UNLOCK TABLES 命令解除锁定(上图)

解除锁定后,‘其它会话’中的更新语句马上得到执行;可以看到,耗时 1 min 5.11 sec(上图)
2.3.3 结论
对于更新操作:
- 当前会话不能更新(理解:加了一把读锁,当然不能进行写(更新)操作啦)
- 其它会话必须等到当前会话解除锁定后才能进行更新,否则一直挂起(毕竟,‘当前会话’加得有锁,‘其它会话’肯定不能写入嘛)
2.4 读其它表
2.4.0 准备
提示:‘当前会话’需要再次锁住 Employee 表(因为上面执行了 UNLOCK TABLES)
LOCK TABLE employee READ;

2.4.1 当前会话
SELECT * FROM department;

2.4.2 其它会话

2.4.3 结论
对于其它表的读取操作:
- 当前会话不能读取(Department 表没有被锁定,不能读取)
- 其它会话可以正常读取
3 结论
读锁,对于当前会话 (Owner) 来说,可以读取锁住的表、但不能更新,也不能读取其它表;
对于其它会话 (Other) 来说,可以读取锁住的表、更新会被阻塞,可以正常读取其它表;
读锁对于读操作共享;
Mysql锁机制--读锁的更多相关文章
- Mysql锁机制介绍
Mysql锁机制介绍 一.概况MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...
- 对mysql锁机制的学习
1.对于mysql学习,经常翻看一些博客,论坛,好像或多或少有mysq锁机制的学习与总结,所以今天有必要 对mysql锁机制的一些个人的总结,以便以后深入的学习. 2.学习这件事,从来都是“深入浅出” ...
- mysql锁机制(转载)
锁是计算机协调多个进程或线程并发访问某一资源的机制 .在数据库中,除传统的 计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所 ...
- 再谈mysql锁机制及原理—锁的诠释
加锁是实现数据库并发控制的一个非常重要的技术.当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁.加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更 ...
- mysql锁机制和事务隔离
mysql事务 1.InnoDB事务原理 事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致性状态转换为另一种一致性状态. 在数据库提交时,可以确保要么所有修 ...
- (三)MySQL锁机制 + 事务
转: (三)MySQL锁机制 + 事务 表锁(偏读) 偏向MyISAM存储引擎.开销小,加锁快,无死锁,锁定粒度大,发生锁冲突的概率最高,并发最低. 查看当前数据库中表的上锁情况,0表示未上锁. sh ...
- Mysql锁机制--索引失效导致行锁变表锁
Mysql 系列文章主页 =============== Tips:在阅读本文前,最好先阅读 这篇(Mysql锁机制--行锁)文章~ 在上篇文章中,我们看到InnoDB默认的行锁可以使得操作不同行时不 ...
- mysql锁机制详解
前言 大概几个月之前项目中用到事务,需要保证数据的强一致性,期间也用到了mysql的锁,但当时对mysql的锁机制只是管中窥豹,所以本文打算总结一下mysql的锁机制. 本文主要论述关于mysql锁机 ...
- mysql锁机制 读书笔记
目录 MySQL锁机制 1.什么是锁 2.lock与latch 3.InnoDB存储引擎中的锁 3.1锁的类型 3.2 一致性非锁定读 3.3 一致性锁定读 4 锁的算法 4.1行锁的3中算法 4.2 ...
随机推荐
- Windows中添加自己的程序到开机启动中(添加服务,添加注册表)
在系统启动的时候启动自己想要启动的程序: 方法一:利用开机启动文件夹 将exe文件或exe文件的快捷方式复制到(启动)文件夹下 以win7为例:开始→所有程序→启动→鼠标右键打开 方法二:添加系统服务 ...
- Spring Boot整合Spring Security
Spring Boot对于该家族的框架支持良好,但是当中本人作为小白配置还是有一点点的小问题,这里分享一下.这个项目是使用之前发布的Spring Boot会员管理系统重新改装,将之前filter登录验 ...
- SLF4J - 一个允许你统一日志记录API的抽象层
一.什么是SLF4J 我们在做Java开发时,如果需要记录日志,有很多日志API可供选择,如: java.util.logging Apache log4j logback SLF4J又是个什么东东呢 ...
- 200行Py代码带你实现"打飞机"
前言 多年前,你我在一起"打飞机".为了实现真正的打飞机,在下一年前踏足帝都学习了无所不能的Python,辣么接下来带你在俩个小时用200行代码学会打飞机. python中提供了一 ...
- leetcode算法:Reshape the Matrix
In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...
- Python之匿名函数
匿名函数 匿名函数:为了解决那些功能很简单的需求而设计的一句话函数. #这段代码 def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lam ...
- netty学习--handler传递
在netty中的处理链pipeline中,事件是按顺序传递的,把自己拟人为netty程序,针对进来(inbound)的请求,会从head开始,依次往tail传递. pipeline采用了链表结构,he ...
- CSS属性操作
CSS属性操作 1 属性选择器 Elenment(元素) E[att] 匹配所有具有att属性的E元素,不考虑它的值.(注意:E在此处可以省略)(推荐使用) 例如:[po]{ font-size: 5 ...
- Windows10下的docker安装与入门 (一)使用docker toolbox安装docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- Windows10 64位系统安装 .NET Framework 3.5
1)下载NET Framework 3.5 [地址:https://pan.baidu.com/s/1c1FhXLY] 2)编辑NET Framework 3.5.bat ,修改sxs文件存放路径: ...