一、mysql都有哪些存储引擎?各自的特点是什么?

引擎 事务 主键 索引 外键 数据结构 适用场景
InnoDB 支持 行锁、表锁 必须有主键,没有设置会自动创建 主键索引和数据在一起,其他索引执行主角索引 支持 2个文件,一个是表结构,一个是索引和数据 事务、增删改频繁
MyISAM 不支持 只支持表锁 可以没有主键 索引存放数据的地址 不支持 3个文件,一个是表结构,一个是索引文件,一个是数据 只适合查询

二、客户端一条sql语句的执行过程?

1.客户端和mysql创建连接,是半双工通信模式,即同一时间客户端和mysql只有一方在发送数据

2.查询缓存

3.查询优化,包含sql解析,sql预处理(检验sql的合法性),查询优化器进行sql优化

4.调用存储引擎的API执行sql语句

5.返回结果给客户端,如果设置了缓存则存放缓存

三、mysql的缓存机制?

mysql可以设置查询缓存,可用性不高,一是因为缓存一般设置的内存不大,难以存放大数据量的缓存;二是因为缓存实际相当于map形式,key是sql语句,value是结果,只有当sql语句完全一样才能命中缓存,多一个空格都不行;三三因为一旦数据库执行update、insert或delete操作,缓存都将会被清除。

四、客户端和mysql连接的状态?

sleep:线程等待客户端发送数据(等待客户端发送sql语句,最常见的状态)

query:线程正在执行客户端的sql语句

Locked:线程正在等待锁的释放

sorting result:线程正在对结果进行排序

sending data:线程正在给客户端返回数据结果

五、mysql的执行计划?

通过explain语句,可以查询sql语句的执行计划

六、mysql索引机制

七、mysql的事务机制

mysql的事务表示一组sql语句要么全部被执行要么全部不执行

1.事务的四大特性(ACID)

原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

2.事务的四种隔离级别

事务的隔离性是为了解决数据库在并发操作时的一些问题,那么再了解事务隔离级别时先分析下事务在并发情况下都有哪些问题?

1.脏读

事务A执行更新操作但是还没有提交或回滚,事务B就查询到了事务A更新过后的数据

2.不可重复读

事务B先执行查询语句,事务A执行更新操作并且提交了,事务B再执行和之前相同的查询语句,发现和第一次查询的结果不一样

3.幻读

当事务B执行了两次相同查询操作之间,事务A执行了插入操作,虽然事物B没有发现不可重复读问题,但是发现多了新的数据

针对这三种问题,mysql提供了四种事务隔离级别来解决这一问题

隔离级别 脏读 不可重复读 幻读
未提交读(read-uncommitted) 没解决 没解决 没解决
已提交读(read-committed) 解决 没解决 没解决
可重读读(repeatable-read) 解决 解决 没解决(innodb通过锁机制解决)
串行化(serializable) 解决 解决 解决

innoDB未提交读:对更新操作的事务添加排他锁,则在提交之前,其他事务无法读取

innoDB已提交读:对查询操作的事物添加共享锁,则在事务完成之前,其他事务无法更新

innoDB可重复读:对范围查询时无数据的间隙中添加gap锁,则数据锁无法插入的,如select * from XX where id > 10,则大于10的空间添加gap锁即可

innoDB串行化:所有sql语句按顺序执行,不存在并发问题,锁的是整个表

八、mysql的锁机制

1、锁的种类

简称 级别 作用 用法
共享锁 S锁、读锁 行锁 当前事务加读锁,其他事务只可读不能修改 sql语句加

LOCK IN SHARE MODE
排他锁 X锁、写锁 行锁 当前事务加写锁,其他事务不可获取任何锁,包括读锁和写锁 sql语句加 for update以及update、insert和delete语句自动加X锁
意向共享锁 IS锁 表锁 有任一事务添加共享锁时,数据库自动维护意向共享锁 并非真正的锁,而是相当于当前表的锁的状态
意向排他锁 IX锁 表锁 有任一事务添加排他锁时,数据库自动维护意向排他锁 并非真正的锁,而是相当于当前表的锁的状态

2、锁的实现原理

锁的本质是对索引进行加锁,如果锁的数据是按主键锁的,就直接锁住主键索引;如果是非主键索引,那么就通过非主键索引找到主键索引进行加锁;如果没有通过索引加锁,那么就会遍历表的聚集索引(默认的主键索引),也就相当于锁住了整个表

3、锁的算法

Record Lock:行锁,通过主键索引或唯一索引等值查询,精准匹配之后锁住的数据行

Gap Lock:间隙锁,数据不存在的连续区间)如当id>30时,id=11也会被锁,因为连续的是从10开始的,范围查询或等值查询记录都不存在时使用,相同 间隙锁之间不冲突,退化成Gap Lock

Next-Key Lock:临键锁,相当于Gap+Record的集合,采取左开右闭原则,innodb的默认锁,没有成功就会退化成gap,或者由gap再退化成record

间隙锁,数据不存在的连续区间)如当id>30时,id=11也会被锁,因为连续的是从10开始的
范围查询或等值查询记录都不存在时使用,相同 间隙锁之间不冲突,退化成Gap Lock

九、mysql的sql语句的关键字顺序

1、from,第一步是找到查询的表

2、on,如果是关联查询,需要用on关联两个表

3、where 找到了需要查询的表,就需要采用where来对数据进行过滤

4、group by,对过滤的数据进行分组(返回的是一个游标而不是一个表,所以可以从这之后使用别名,而where就不可)

5、having 对group by的结果进行过滤

6、select 查询需要返回的列

7、order by对返回对数据进行排序

mysql全方位知识大盘点的更多相关文章

  1. 《.Net 的冰与火之歌》寄雁传书,你必须知道的C#参数知识大盘点

    引言 参数,也叫参变量,是一个变量.在方法签名中随处可见,实现了不同方法间对于数据的寄雁传书,基本上充斥在代码的各个角落里.在方法签名或者原型中,方法名称后的括号包含方法的参数及其类型的完整列表.参数 ...

  2. mysql日志体系大盘点

    MySql日志文件主要包含:错误日志.慢查询日志.事务日志.二进制日志等 Mysql的日志配置可以通过命令 show global variables like '%log%'; 执行的结果如下 &q ...

  3. MySQL系列(一)--基础知识大总结

    MySQL系列(一)---基础知识大总结 前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里只是作为简单的介绍,但是具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续 ...

  4. MySQL高级知识(十六)——小表驱动大表

    前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...

  5. 当今游戏大作share的特性大盘点

    极品游戏制作时的考虑要素大盘点 不知不觉入坑Steam已近4年,虽然说Steam的毒性让很多人走向一条不归路,但是想我这样即使"中毒"还是很快乐很感恩的.那么本期文章就谈谈我对其中 ...

  6. Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数

    mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...

  7. 2018 AI产业界大盘点

    2018  AI产业界大盘点 大事件盘点 “ 1.24——Facebook人工智能部门负责人Yann LeCun宣布卸任 Facebook人工智能研究部门(FAIR)的负责人Yann LeCun宣布卸 ...

  8. MySQL高级知识(十四)——行锁

    前言:前面学习了表锁的相关知识,本篇主要介绍行锁的相关知识.行锁偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,但并发度高. 0.准备 #1.创建相关测试表tb_ ...

  9. MySQL高级知识(十三)——表锁

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

随机推荐

  1. 如何在Spring boot中修改默认端口

    文章目录 介绍 使用Property文件 在程序中指定 使用命令行参数 值生效的顺序 如何在Spring boot中修改默认端口 介绍 Spring boot为应用程序提供了很多属性的默认值.但是有时 ...

  2. 基于jenkins自动打包并部署docker环境

    一.实验环境 git                      192.168.200.71 jenkins    192.168.200.72 docker               192.16 ...

  3. .net 使用TCP模拟UDP广播通信加强广播通信的稳定性

    应用场景:当每一台终端开启程序后发出消息,其他终端必须收到消息然后处理 思路1:使用UDP广播.     缺点:UDP广播信号不稳定,无法确定每一台机器能接收到信号 思路2:将一台主机作为服务器,使用 ...

  4. Eclipse Mac OS版 卸载svn插件subclipse

    点击Eclipse -> About Eclipse 在打开的窗口中点击Installation Details(安装细节) 在Installed Software标签窗口中,选中Subclip ...

  5. 交换机上的MAC地址表

    拓扑图: 1.首先在R1上的配置: R1(config)#int R1(config)#interface g R1(config)#interface gigabitEthernet 0/0 R1( ...

  6. WFP之位图效果

    首先看一个图片:   在"第一步"这个按钮周围,有一转红色,这个效果就是用WPF的位图效果实现的. 位图效果(BitmapEffect 对象)是简单的像素处理操作.位图效果将 Bi ...

  7. apache调优技巧之一隐藏apahce版本信息

    如果你的服务器版本信息是这样的,是很 危险的. [root@xinsz63 httpd-2.2.27]# curl -I 192.168.1.38 HTTP/1.1 403 Forbidden Dat ...

  8. 图论--拓扑排序--HDU-1285确定比赛名次

    Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...

  9. P3119 [USACO15JAN]Grass Cownoisseur G

    P3119 [USACO15JAN]Grass Cownoisseur G tarjan缩点+分层图上跑 spfa最长路 约翰有 \(n\) 块草场,编号 \(1\) 到 \(n\),这些草场由若干条 ...

  10. J集合选数

    题意:求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中.(结果对1e9+1取模) 分析: 首先,什么样的数才会产生排斥呢?(选了这个 ...