MySQL一直是面试中的热点问题,也难道了很多的面试者。其实MySQL没那么难,只是大家没有系统化、实战性的过去学习、总结。同时很多开发者在实际的开发过程中也很少去接触一些偏向底层的知识。
本手册,已总结成完整的PDF文档。想获取该文档,请到文章末尾领取。
今天这篇文章,将为大家总结MySQL中场景的面试题。围绕索引、事务、锁等几个方面的热点问题,系统化的总结。大致分为如下大纲:
什么是MySQL?
MySQL是⼀个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流⾏的关系型数据库管理系统之⼀,在 WEB 应⽤⽅⾯,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统) 应⽤软件之⼀。在Java企业级开发中⾮常常⽤,因为 MySQL 是开源免费的,并且⽅便扩展。
MySql, Oracle,Sql Service的区别?
1. Sql Service只能在Windows上使⽤,⽽MySql和Oracle可以在其他系统上使⽤, ⽽且可以⽀持数据库不同系统之间的移植
2. MySql开源免费的,Sql Service和Oracle要钱。
3. 我从⼩到⼤排序哈,MySql很⼩,Sql Service居中,Oracle最⼤
4. Oracle⽀持⼤并发量,⼤访问量,Sql Service还⾏,⽽MySql的话压⼒没这么⼤,因此现在的MySql的话最好是要使⽤集群或者缓存来搭配使⽤
5. Oracle⽀持多⽤户不同权限来进⾏操作,⽽MySql只要有登录权限就可操作全部数据库
6. 安装所⽤的空间差别也是很⼤的,Mysql安装完后才⼏百M⽽Oracle有⼏G左右,且使⽤的时候Oracle占⽤特别⼤的内存空间和其他机器性能。
7. 做分⻚的话,MySql使⽤Limit,Sql Service使⽤top,Oracle使⽤row
8. Oracle没有⾃动增⻓类型,Mysql和Sql Service⼀般使⽤⾃动增⻓类型
什么是索引?
索引是一种特殊的文件(innoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针
索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。
更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录索引是一个文件,它是要占据物理空间的。
索引的使用场景?
1.当数据多且字段值有相同的值得时候用普通索引。
2.当字段多且字段值没有重复的时候用唯一索引。
3.当有多个字段名都经常被查询的话用复合索引。
4.普通索引不支持空值,唯一索引支持空值。
5.但是,若是这张表增删改多而查询较少的话,就不要创建索引了,因为如果你给一列创建了索引,那么对该列进行增删改的时候,都会先访问这一列的索引,
6.若是增,则在这一列的索引内以新填入的这个字段名的值为名创建索引的子集
7.若是改,则会把原来的删掉,再添入一个以这个字段名的新值为名创建索引的子集,
8.若是删,则会把索引中以这个字段为名的索引的子集删掉。
9.所以,会对增删改的执行减缓速度,
10.所以,若是这张表增删改多而查询较少的话,就不要创建索引了,
11.更新太频繁地字段不适合创建索引。
12.不会出现在where条件中的字段不该建立索引。
B树和B+树的区别?
在B树中,你可以将键和值存放在内部节点和叶子节点;但在B+树中,内部节点都是键,没有值,叶子节点同时存放键和值。
B+树的叶子节点有一条链相连,而B树的叶子节点各自独立。
非聚簇索引一定会回表查询吗?
当数据库有并发事务的时候,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,锁机制就是这样的一个机制。就像酒店的房间,如果大家随意进出,就会出现多人抢夺同一个房间的情况,而在房间上装上锁,申请到钥匙的人才可以入住并且将房间锁起来,其他人只有等他使用完毕才可以再次使用。
什么是死锁?怎么解决?
死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。
常见的解决死锁的方法:
-
如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会。
-
在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率
-
对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率
SQL语句主要分为哪几类?
-
数据定义语言DDL(Data Ddefinition Language)CREATE,DROP,ALTER主要为以上操作 即对逻辑结构等有操作的,其中包括表结构,视图和索引。
-
数据查询语言DQL(Data Query Language)SELECT这个较为好理解 即查询操作,以select关键字。各种简单查询,连接查询等 都属于DQL。
-
数据操纵语言DML(Data Manipulation Language)INSERT,UPDATE,DELETE主要为以上操作 即对数据进行操作的,对应上面所说的查询操作 DQL与DML共同构建了多数初级程序员常用的增删改查操作。而查询是较为特殊的一种 被划分到DQL中。
-
数据控制功能DCL(DataControlLanguage)GRANT,REVOKE,COMMIT,ROLLBACK主要为以上操作 即对数据库安全性完整性等有操作的,可以简单的理解为权限控制等。
资料整理自网络,仅作免费交流分享,侵权删!
需要完整资料的看这里
扫码添加助教领取
(备注:160道MySQL面试题)