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锁机制--读锁的更多相关文章

  1. Mysql锁机制介绍

    Mysql锁机制介绍 一.概况MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

  2. 对mysql锁机制的学习

    1.对于mysql学习,经常翻看一些博客,论坛,好像或多或少有mysq锁机制的学习与总结,所以今天有必要 对mysql锁机制的一些个人的总结,以便以后深入的学习. 2.学习这件事,从来都是“深入浅出” ...

  3. mysql锁机制(转载)

    锁是计算机协调多个进程或线程并发访问某一资源的机制 .在数据库中,除传统的 计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所 ...

  4. 再谈mysql锁机制及原理—锁的诠释

    加锁是实现数据库并发控制的一个非常重要的技术.当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁.加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更 ...

  5. mysql锁机制和事务隔离

    mysql事务 1.InnoDB事务原理 事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致性状态转换为另一种一致性状态. 在数据库提交时,可以确保要么所有修 ...

  6. (三)MySQL锁机制 + 事务

    转: (三)MySQL锁机制 + 事务 表锁(偏读) 偏向MyISAM存储引擎.开销小,加锁快,无死锁,锁定粒度大,发生锁冲突的概率最高,并发最低. 查看当前数据库中表的上锁情况,0表示未上锁. sh ...

  7. Mysql锁机制--索引失效导致行锁变表锁

    Mysql 系列文章主页 =============== Tips:在阅读本文前,最好先阅读 这篇(Mysql锁机制--行锁)文章~ 在上篇文章中,我们看到InnoDB默认的行锁可以使得操作不同行时不 ...

  8. mysql锁机制详解

    前言 大概几个月之前项目中用到事务,需要保证数据的强一致性,期间也用到了mysql的锁,但当时对mysql的锁机制只是管中窥豹,所以本文打算总结一下mysql的锁机制. 本文主要论述关于mysql锁机 ...

  9. mysql锁机制 读书笔记

    目录 MySQL锁机制 1.什么是锁 2.lock与latch 3.InnoDB存储引擎中的锁 3.1锁的类型 3.2 一致性非锁定读 3.3 一致性锁定读 4 锁的算法 4.1行锁的3中算法 4.2 ...

随机推荐

  1. IIS 配置 FTP 网站

    在 服务器管理器 的 Web服务器IIS 上安装 FTP 服务 在 IIS管理器 添加FTP网站 配置防火墙规则 说明:服务器环境是Windows Server 2008 R2,IIS7.5. 1. ...

  2. WPF自定义控件与样式-自定义按钮(Button)

    一.前言 程序界面上的按钮多种多样,常用的就这几种:普通按钮.图标按钮.文字按钮.图片文字混合按钮.本文章记录了不同样式类型的按钮实现方法. 二.固定样式的按钮 固定样式的按钮一般在临时使用时或程序的 ...

  3. linux下的Shell编程(5)循环

    Shell Script中的循环有下面几种格式: while [ cond1 ] && { || } [ cond2 ] -; do - done for var in -; do - ...

  4. C# 基于Bootstrap的三级联动

    实现效果如图: 一.声明市.县.乡对应的下拉控件select <div class="form-group"> <label class="col-sm ...

  5. jacascript 构造函数、原型对象和原型链

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 先梳理一下定义: 我们通常认为 object 是普通对象,function 是函数对象: Function ...

  6. C#之序列化对象(二进制方式序列化对象)

    应用程序有时需要以对象的形式在磁盘上存储数据,FrameWork有两个可用的实现方式: 一:System.Runtime.Serialization.Formatters.Binarry这个名称空间包 ...

  7. MongoDB系列六(聚合).

    一.概念 使用聚合框架可以对集合中的文档进行变换和组合.基本上,可以用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理.这些构件包括筛选(filtering).投射(project ...

  8. Leetcode 804. Unique Morse Code Words 莫尔斯电码重复问题

    参考:https://blog.csdn.net/yuweiming70/article/details/79684433 题目描述: International Morse Code defines ...

  9. 直接插入排序算法:ArrayList实现和数组实现

    直接插入排序算法思想: 排序区间R[1..n]: 在排序的过程中,整个排序区间被分为两个子区间: 有序区R[ 1 ... i-1 ]和无序区R[ i ... n ]: 共进行n-1趟排序,每趟排序都是 ...

  10. [Codeforces 922E]Birds

    Description 题库链接 一条直线上有 \(n\) 棵树,每棵树上有 \(c_i\) 只鸟,在一棵树底下召唤一只鸟的魔法代价是 \(cost_i\) 每召唤一只鸟,魔法上限会增加 \(B\) ...