Mysql

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

2019-12-30  本文已影响0人  java菲菲
备战春招之MySQL:历年高频面试真题梳理及众多学习笔记和书籍

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

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 标准定义的四个隔离级别为:

5、CHAR 和 VARCHAR 的区别?

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

数据库历年高频真题梳理

02 数据库学习笔记及书籍

(1)MySQL学习高频知识点

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

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个最佳实践

MySQ性能优化21个最佳实践

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

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

最后的最后:读者彩蛋

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

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

性能优化问题汇总

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

上一篇 下一篇

猜你喜欢

热点阅读