MySQL锁表概述

ling1234567abc

ling1234567abc

2016-02-19 16:06

今天图老师小编给大家展示的是MySQL锁表概述,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

1、对于MySQL来说,有三种锁的级别:页级、表级、行级

页级的典型代表引擎为BDB。

表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM。

行级的典型代表引擎为INNODB。

2、我们实际应用中用的最多的就是行锁

行级锁的优点如下:

1)、当很多连接分别进行不同的查询时减小LOCK状态。

2)、如果出现异常,可以减少数据的丢失。因为一次可以只回滚一行或者几行少量的数据。

行级锁的缺点如下:

1)、比页级锁和表级锁要占用更多的内存。

2)、进行查询时比页级锁和表级锁需要的I/O要多,所以我们经常把行级锁用在写操作而不是读操作。

3)、容易出现死锁。

3、MySQL用写队列和读队列来实现对数据库的写和读操作

对于写锁定如下:

1)、如果表没有加锁,那么对其加写锁定。

2)、否则,那么把请求放入写锁队列中。

对于读锁定如下:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

1)、如果表没有加写锁,那么加一个读锁。

2)、否则,那么把请求放到读锁队列中。

当然我们可以分别用low_priority 以及high_priority在写和读操作上来改变这些行为。

4、下面我来一个简单的例子解释上面的说法

我们来运行一个时间很长的查询

1)、客户端1:
mysql select count(*) from content group by content;


客户端2:
mysql update content set content = ‘I love you’ where id = 444;
Query OK, 1 row affected (30.68 sec)
Rows matched: 1  Changed: 1  Warnings: 0

用了半分钟。
2)、我们现在终止客户端1。
此时客户端2:
mysql update content set content = ‘I hate you’ where id = 444;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

仅仅用了20毫秒。

这个例子很好的说明了读写队列的运行。

对于1中的客户端1,此时表没有加锁,当然也没有加写锁了,那么此时客户端1对表加了一个读锁。

对于1中的客户端2,此时因为表有一个读锁,所以把UPDATE请求放到写锁定队列中。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

当读锁释放的时候,也就是SHOW PROCESSLIST中STATUS 为COPY TO TMP TABLE的时候,UPDATE操作开始执行。

5、可以在REPLICATION中对MASTER 和SLAVE运用不同的锁定使系统达到最佳的性能当然这个前提是SQL语句都是最优的。

展开更多 50%)
分享

猜你喜欢

MySQL锁表概述

编程语言 网络编程
MySQL锁表概述

mysql锁和死锁

编程语言 网络编程
mysql锁和死锁

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Mysql入门系列:获取MYSQL表信息

编程语言 网络编程
Mysql入门系列:获取MYSQL表信息

MYSQL教程:MySQL服务器权限表

编程语言 网络编程
MYSQL教程:MySQL服务器权限表

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

通过mysql show processlist 命令检查mysql锁的方法

编程语言 网络编程
通过mysql show processlist 命令检查mysql锁的方法

快速升级MySQL系统表

编程语言 网络编程
快速升级MySQL系统表

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

SQL Server约束和DML触发器的比较

SQL Server约束和DML触发器的比较

$.ajax json数据传递方法

$.ajax json数据传递方法
下拉加载更多内容 ↓