凡亿专栏 | 面试官:MySQL连环炮,你扛得住嘛?
面试官:MySQL连环炮,你扛得住嘛?

为了节省大家的时间,阿Q决定帮大家先将 MySQL 面试相关的知识进行汇总整理,一改往日知识点东一棒槌西一榔头的问题。那么,你准备好迎接 MySQL 连环炮了嘛?


  • 1、三大范式

  • 2、DML 语句和 DDL 语句区别

  • 3、主键和外键的区别

  • 4、drop、delete、truncate 区别

  • 5、基础架构

  • 6、MyISAM 和 InnoDB 有什么区别?

  • 7、推荐自增id作为主键问题

  • 8、为什么 MySQL 的自增主键不连续

  • 9、redo log 是做什么的?

  • 10、redo log 的刷盘时机

  • 11、redo log 是怎么记录日志的

  • 12、什么是 binlog

  • 13、binlog 记录格式

  • 14、binlog 写入机制

  • 15、redolog 和 binlog 的区别是什么

  • 16、两阶段提交

  • 17、什么是 undo log.

  • 18、什么是 relaylog

  • 19、索引

  • 20、Hash 索引

  • 21、B树和B  树

  • 22、主键索引

  • 23、二级索引

  • 24、聚簇索引与非聚簇索引

  • 25、回表

  • 26、覆盖索引和联合索引

  • 27、最左前缀匹配原则

  • 28、索引下推

  • 29、隐式转换

  • 30、普通索引和唯一索引该怎么选择?

  • 31、避免索引失效

  • 32、建立索引的规则

  • 33、事务极其特性

  • 34、并发事务带来的问题

  • 35、事务的隔离级别

  • 36、MVCC

  • 37、Mysql 中的锁

  • 38、查询语句执行过程

  • 39、更新语句执行过程

  • 40、sql 优化

  • 41、主从同步数据

  • 42、主从延迟要怎么解决

  • 43、为什么不要使用长事务


1、三大范式

1NF(第一范式):属性(对应于表中的字段)不能再被分割,也就是这个字段只能是一个值,不能再分为多个其他的字段了。1NF 是所有关系型数据库的最基本要求 ,也就是说关系型数据库中创建的表一定满足第一范式。

2NF(第二范式):2NF 要求数据库表中的每个实例或行必须可以被惟一地区分,2NF 在 1NF 的基础上增加了一个列,这个列称为主键,非主属性都依赖于主键。

3NF(第三范式):3NF 在 2NF 的基础之上,要求每列都和主键列直接相关,而不是间接相关,即不存在其他表的非主键信息。

在开发过程中,并不一定要满足三大范式,有时候为了提高查询效率,可以在表中冗余其他表的字段。

2、DML 语句和 DDL 语句区别

  • DML 是数据库操作语言(Data Manipulation Language)的缩写,是指对数据库中表记录的操作,主要包括表记录的插入、更新、删除和查询,是开发人员日常使用最频繁的操作。

  • DDL (Data Definition Language)是数据定义语言的缩写,简单来说,就是对数据库内部的对象进行创建、删除、修改的操作语言。它和 DML 语言的最大区别是 DML 只是对表内部数据的操作,而不涉及到表的定义、结构的修改,更不会涉及到其他对象。DDL 语句更多的被数据库管理员(DBA)所使用,一般的开发人员很少使用。

3、主键和外键的区别

  • 主键:用于唯一标识一行数据,不能有重复,不允许为空,且一个表只能有一个主键;

  • 外键:用来和其他表建立联系,外键是另一表的主键,外键是可以有重复的,可以是空值。一个表可以有多个外键;

4、drop、delete、truncate 区别

(1)用法不同

  • drop(丢弃数据): drop table 表名 ,直接将表结构都删除掉,在删除表的时候使用。

  • truncate (清空数据) : truncate table 表名 ,只删除表中的数据,再插入数据的时候自增长 id 又从 1 开始,在清空表中数据的时候使用。

  • delete(删除数据) : delete from 表名 where 列名=值,删除某一行的数据,如果不加 where 子句和truncate table 表名作用类似。

(2)属于不同的数据库语言

  • truncate 和 drop 属于 DDL(数据定义语言)语句,操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。

  • delete 语句是 DML (数据库操作语言)语句,这个操作会放到 rollback segment 中,事务提交之后才生效。

(3)执行速度不同

  • delete命令执行的时候会产生数据库的binlog日志,而日志记录是需要消耗时间的,但是也有个好处方便数据回滚恢复。

  • truncate命令执行的时候不会产生数据库日志,因此比delete要快。除此之外,还会把表的自增值重置和索引恢复到初始大小等。

  • drop命令会把表占用的空间全部释放掉。

一般来说:drop > truncate > delete

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论