美文网首页Mysql
备战春招之MySQL:历年高频面试真题梳理及众多学习笔记和书籍

备战春招之MySQL:历年高频面试真题梳理及众多学习笔记和书籍

作者: java菲菲 | 来源:发表于2019-12-30 22:14 被阅读0次
    备战春招之MySQL:历年高频面试真题梳理及众多学习笔记和书籍

    01 数据库历年高频真题梳理

    • 1、MySQL 中有哪几种锁?
    • 2、MySQL 中有哪些不同的表格?
    • 3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别
    • 4、MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
    • 5、CHAR 和 VARCHAR 的区别?
    • 6、主键和候选键有什么区别?
    • 7、myisamchk 是用来做什么的?
    • 8、如果一个表有一列定义为 TIMESTAMP,将发生什么?
    • 9、你怎么看到为表格定义的所有索引?
    • 10、LIKE 声明中的%和_是什么意思?
    • 11、列对比运算符是什么?
    • 12、BLOB 和 TEXT 有什么区别?
    • 13、MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么?
    • 14、MyISAM 表格将在哪里存储,并且还提供其存储格式?
    • 15、MySQL 如何优化 DISTINCT?
    • 16、如何显示前 50 行?
    • 17、可以使用多少列创建索引?
    • 18、NOW()和 CURRENT_DATE()有什么区别?
    • 19、什么是非标准字符串类型?
    • 20、什么是通用 SQL 函数?
    • 21、MySQL 支持事务吗?
    • 22、MySQL 里记录货币用什么字段类型好
    • 23、MySQL 有关权限的表都有哪几个?
    • 24、列的字符串类型可以是什么?
    • 25、MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
    • 26、锁的优化策略
    • 27、索引的底层实现原理和优化
    • 28、什么情况下设置了索引但无法使用
    • 29、实践中如何优化 MySQL
    • 30、优化数据库的方法
    • 31、简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)
    • 32、数据库中的事务是什么?
    • 33、SQL 注入漏洞产生的原因?如何防止?
    • 34、为表中的字段选择合适得数据类型
    • 35、存储时期
    • 36、对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题:
    • 37、解释 MySQL 外连接、内连接与自连接的区别
    • 38、Myql 中的事务回滚机制概述
    • 39、SQL 语言包括哪几部分?每部分都有哪些操作关键字?
    • 40、完整性约束包括哪些?
    • 41、什么是锁?
    • 42、什么叫视图?游标是什么?
    • 43、什么是存储过程?用什么来调用?
    • 44、如何通俗地理解三个范式?
    • 45、什么是基本表?什么是视图?
    • 46、试述视图的优点?
    • 47、 NULL 是什么意思
    • 48、主键、外键和索引的区别?
    • 49、你可以用什么来确保表格里的字段只接受特定范围里的值?
    • 50、说说对 SQL 语句优化有哪些方法?(选择几条)

    1、MySQL 中有哪几种锁?

    · 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

    · 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

    · 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

    2、MySQL 中有哪些不同的表格?

    共有 5 种类型的表格:

    · MyISAM

    · Heap

    · Merge

    · INNODB

    · ISAM

    3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别

    MyISAM:

    · 不支持事务,但是每次查询都是原子的;

    · 支持表级锁,即每次操作是对整个表加锁;

    · 存储表的总行数;

    · 一个 MYISAM 表有三个文件:索引文件、表结构文件、数据文件;

    · 采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。

    InnoDb:

    · 支持 ACID 的事务,支持事务的四种隔离级别;

    · 支持行级锁及外键约束:因此可以支持写并发;

    不存储总行数:

    一个 InnoDb 引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受操作系统文件大小限制,一般为 2G),受操作系统文件大小的限制;

    主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;最好使用自增主键,防止插入数据时,为维持 B+树结构,文件的大调整。

    4、MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?

    SQL 标准定义的四个隔离级别为:

    • 1. read uncommited :读到未提交数据
    • 2. read committed:脏读,不可重复读
    • 3. repeatable read:可重读
    • 4. serializable :串行事物

    5、CHAR 和 VARCHAR 的区别?

    • 1. CHAR 和 VARCHAR 类型在存储和检索方面有所不同
    • 2. CHAR 列长度固定为创建表时声明的长度,长度值范围是 1 到 255 当 CHAR值被存储时,它们被用空格填充到特定长度,检索 CHAR 值时需删除尾随空格。

    由于篇幅有限,这里就不一一列出所有的答案了,下面还要为大家展示一下MySQL的学习笔记及书籍,这份数据库历年高频真题梳理已整理成Word文档,有需要的小伙伴可以【“点我免费领取”】

    数据库历年高频真题梳理

    02 数据库学习笔记及书籍

    (1)MySQL学习高频知识点

    • 1、事务四大特性(ACID)原子性、一致性、隔离性、持久性?
    • 2、事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?
    • 3、MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别?
    • 4、MySQL的MyISAM与InnoDB两种存储引擎在,事务、锁级别,各自的适用场景?
    • 5、查询语句不同元素(where、jion、limit、group by、having等等)执行先后顺序?
    • 6、什么是临时表,临时表什么时候删除?
    • 7、MySQL B+Tree索引和Hash索引的区别?
    • 8、sql查询语句确定创建哪种类型的索引?如何优化查询?
    • 9、聚集索引和非聚集索引区别?
    • 10、有哪些锁(乐观锁悲观锁),select 时怎么加排它锁?
    • 11、非关系型数据库和关系型数据库区别,优势比较?
    • 12、数据库三范式,根据某个场景设计数据表?
    • 13、数据库的读写分离、主从复制,主从复制分析的 7 个问题?
    • 14、使用explain优化sql和索引?
    • 15、MySQL慢查询怎么解决?
    • 16、什么是 内连接、外连接、交叉连接、笛卡尔积等?
    • 17、mysql都有什么锁,死锁判定原理和具体场景,死锁怎么解决?
    • 18、varchar和char的使用场景?
    • 19、mysql 高并发环境解决方案?
    • 20、数据库崩溃时事务的恢复机制(REDO日志和UNDO日志)?

    1、事务四大特性(ACID)原子性、一致性、隔离性、持久性?

    原子性(Atomicity)

    · 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

    一致性(Consistency)

    · 事务开始前和结束后,数据库的完整性约束没有被破坏。比如A向B转账,不可能A扣了钱,B却没收到

    隔离性(Isolation)

    · 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离

    同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

    关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。   持久性(Durability)

    · 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作

    2、事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?

    从理论上来说, 事务应该彼此完全隔离, 以避免并发事务所导致的问题,然而, 那样会对性能产生极大的影响, 因为事务必须按顺序运行, 在实际开发中, 为了提升性能, 事务会以较低的隔离级别运行, 事务的隔离级别可以通过隔离事务属性指定

    2.1事务的并发问题

    (1)脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

    (2)不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致。

    (3)幻读:幻读解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。

    例如:事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作 这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。 而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有跟没有修改一样,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。

    小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。

    2.2事务的隔离级别

    image.png
    • 读未提交:另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据脏读

    • 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致。

    • 可重复读:在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的。但是,会有幻读现象

    • 串行化:最高的隔离级别,在这个隔离级别下,不会产生任何异常。并发的事务,就像事务是在一个个按照顺序执行一样

    2.3 MySQL默认的事务隔离级别为repeatable-read

    · MySQL 支持 4 中事务隔离级别.

    · 事务的隔离级别要得到底层数据库引擎的支持, 而不是应用程序或者框架的支持.

    · Oracle 支持的 2 种事务隔离级别:READ_COMMITED , SERIALIZABLE

    2.3补充

    1. SQL规范所规定的标准,不同的数据库具体的实现可能会有些差异

    2. MySQL中默认事务隔离级别是“可重复读”时并不会锁住读取到的行

    · 事务隔离级别未提交读时,写数据只会锁住相应的行。

    · 事务隔离级别为可重复读时,写数据会锁住整张表。

    · 事务隔离级别为串行化时,读写数据都会锁住整张表。

    隔离级别越高越能保证数据的完整性和一致性,但是对并发性能的影响也越大,鱼和熊掌不可兼得啊。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。

    MySQL学习高频知识点

    (2)MySQL学习路线图(xmind)

    MySQL学习路线图

    (3)MySQL学习书籍:MySQL+技术内幕:InnoDB存储引擎-3.pdf


    MySQL学习书籍:MySQL+技术内幕:InnoDB存储引擎-3.pdf

    03 数据库性能优化

    (1)MySQ性能优化21个最佳实践

    • 1、为查询缓存优化你的查询
    • 2、EXPLAIN你的SELECT查询
    • 3、当只要一行数据时使用LIMIT 1
    • 4、为搜索字段建索引
    • 5、在Join表的时候使用相当类型的例,并将其索引
    • 6、千万不要 ORDER BY RAND()
    • 7、避免 SELECT *
    • 8、永远为每张表设置一个 ID
    • 9、使用 ENUM 而不是 VARCHAR
    • 10、从 PROCEDURE ANALYSE() 取得建议
    • 11、尽可能的使用 NOT NULL
    • 12、Prepared Statements
    • 13、无缓冲的查询
    • 14、把 IP 地址存成 UNSIGNED INT
    • 15、固定长度的表会更快
    • 16、垂直分割
    • 17、拆分大的 DELETE 或 INSERT 语句
    • 18、越小的列会越快
    • 19、选择正确的存储引擎
    • 20、使用一个对象关系映射器(Object Relational Mapper)
    • 21、小心“永久链接”
    MySQ性能优化21个最佳实践

    (2)MySQL优化问题学习路线图(xmind)

    MySQL优化问题学习路线图(xmind)

    最后的最后:读者彩蛋

    今天关于备战春招之MySQL就分享这么多,如果你对文中提到的各种数据库学习资料感兴趣,可以点击下面的链接进去石墨文档免费领取,让我们一起备战春招吧!

    《免费获取:java架构专题+数据库+算法+Redis+中间件+JVM+大厂面试真题(含解析)+学习视频+学习书籍+学习思维导图...》

    性能优化问题汇总

    最后说到性能优化问题,前些日子还总结了一波MySQL+Tomcat+JVM的性能优化问题汇总,这里也一起分享出来给大家学习参考一下下!!

    相关文章

      网友评论

        本文标题:备战春招之MySQL:历年高频面试真题梳理及众多学习笔记和书籍

        本文链接:https://www.haomeiwen.com/subject/pmcvoctx.html