MySQL性能优化(八)-- 锁机制之表锁

栏目: 数据库 · 发布时间: 6年前

内容简介:下面我们模拟两个用户,即两个线程连接数据库,开启两个xsheel窗口,连接到mysql:答案是可以的。答案也是可以的。

1.读锁

create table lock_one(
     id int primary key auto_increment,
     col int
)engine=myisam;

insert into lock_one(col) values (1);
insert into lock_one(col) values (2);
insert into lock_one(col) values (3);
复制代码

下面我们模拟两个用户,即两个线程连接数据库,开启两个xsheel窗口,连接到mysql:

  1. 在会话1中对lock_one表增加读锁
lock table lock_one read;
复制代码
  1. 在当前会话(会话1)中是否可以select该表呢,也就是说对 lock_one增加了读锁后,在当前会话中是否可以读呢?
select * from lock_one;
复制代码

答案是可以的。

  1. 在另一个会话中(会话2)是否可以select该表呢?

答案也是可以的。

  1. 那么在会话1中是否可以查询其他表呢?

例如,查询 users表:select * from users;

MySQL性能优化(八)-- 锁机制之表锁

我们发现是不可以查询其他表的,这是因为当前会话已经对lock_one表加上了锁,即当前线程锁住了lock_one表,只可以操作lock_one表,就不可以查询其他的表。

  1. 问题来了,会话2是否可以查询其他表呢?
select * from users;
复制代码
MySQL性能优化(八)-- 锁机制之表锁

我们发现是可以的。因为会话2和会话1是没有关系的,会话2查询会话1锁住的表都可以,查询没有锁住的 肯定是可以的。

  1. 在会话1中是否可以更新(增删改)锁住的lock_one表呢?
update lock_one set col=66 where id=1;
复制代码
MySQL性能优化(八)-- 锁机制之表锁

发现是不可以的,因为我们对 lock_one表加了 读锁,所以是不可以 进行写操作的。

  1. 在会话2中是否可以更新(增删改)会话1中锁住的lock_one表呢?
MySQL性能优化(八)-- 锁机制之表锁

我们发现是没有执行结果的,也就是说 正在等待更新,在阻塞等待中。因为我们在会话1中对lock_one中增加了读锁,其他人只有读的操作,没有写的操作。

  1. 在会话1中 对lock_one进行解锁时,会话2中的更新(增删改)操作 就会立即执行。
MySQL性能优化(八)-- 锁机制之表锁

2.写锁

  1. 在会话1中对lock_one表增加写锁
lock table lock_one write;
复制代码
  1. 在会话1中查询该表
select * from lock_one;
复制代码

我们发现是可以的。

  1. 在会话2中查询该表
MySQL性能优化(八)-- 锁机制之表锁

我们发现是没有执行结果的,也就是说 处于阻塞状态。因为写锁是排它锁,其他用户线程不可以读取当前锁住的表,只有解锁之后 其他用户线程才可以执行select

MySQL性能优化(八)-- 锁机制之表锁
  1. 在会话1中对lock_one进行写锁后,会话1会否可以查询其他表呢?
select * from users;
复制代码
MySQL性能优化(八)-- 锁机制之表锁

我们发现是不可以的。道理和读锁的时候一样,当前会话已经对lock_one表加上了锁,即当前线程锁住了lock_one表,只可以操作lock_one表,就不可以查询其他的表。

  1. 那么在会话2中是否可以查询其他表呢?

答案肯定是可以的。因为之和锁的表有关系,和其他表没有任何关系。

  1. 在会话1中是否可以进行写(增删改)操作呢?

答案一定是可以的。因为会话1对lock_one表进行了写锁操作,也就是只可以写。

  1. 在会话2中是否可以进行写(增删改)操作呢?
MySQL性能优化(八)-- 锁机制之表锁

我们发现是不可以的。因为写锁是排它锁,也就是只可以当前线程操作锁住的表,其他用户线程需要等到解锁之后才可以操作该表。

MySQL性能优化(八)-- 锁机制之表锁

3.总结

  1. 甲对表A加了读锁
  • 甲对表A可以执行读(查询)操作,但不可以执行写(增删改)操作
  • 甲对其他表不可以执行读写(增删改查)操作
  • 乙对表A可以执行读(查询)操作,但不可以执行写(增删改)操作
  • 乙对其他表可以执行读写(增删改查)操作
MySQL性能优化(八)-- 锁机制之表锁
  1. 甲对表A加了写锁
  • 甲对表A可以执行读写(增删改查)操作
  • 甲对其他表不可以执行读写(增删改查)操作
  • 乙对表A不可以执行读写(增删改查)操作
  • 乙对其他表可以执行读写(增删改查)操作
MySQL性能优化(八)-- 锁机制之表锁
欢迎关注我的公众号,第一时间接收最新文章~ 搜索公众号:

或者 扫描下方二维码:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Producter 让产品从0到1

Producter 让产品从0到1

周楷雯 / 人民邮电出版社 / 2016-12-25 / CNY 69.00

这是一本以App Store首页推荐的成功App为例阐述如何完成一款App产品的设计、开发和营销的书。在这本书之后,作者的《一炷香》和《字里行间》两款产品也接连被App Store首页推荐。 《Producter 让产品从0到1》从产品的设计、产品的实现、产品的迭代、产品的营销、产品的进阶等几个角度,全面讲解了产品设计的基本原则、设计的重要性、设计的感觉、实用的设计工具、简单的iOS开发、产......一起来看看 《Producter 让产品从0到1》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具