20道常见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事务的隔离级别

事务隔离级别

  • 读未提交:另一个事务修改了数据,但尚未提交,而本事务中的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,它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。

21条MySQL性能调优经验

  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. 小心“永久链接”

最后,附一张自己面试前准备的脑图:

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

  • Spring全家桶(实战系列)

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

资料领取方式:Java全套学习手册

g-JnYToAJN-1626181646003)]

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

资料领取方式:Java全套学习手册

以上学习资料均免费分享,最后祝愿各位身体健康,顺利拿到心仪的offer!

免费java培训课程,2021最新版!相关推荐

  1. 【金三银四】Java中间件面试题(2021最新版)

    目录 前言 Zookeeper 1. ZooKeeper 是什么? 2. ZooKeeper 提供了什么? 3.Zookeeper 文件系统 4. ZAB 协议? 5. 四种类型的数据节点 Znode ...

  2. Java知识体系(2021最新版)

    目录 Java 开发框架 底层&应用 架构 面试题 读书笔记 开源项目脚手架 其他相关技术 程序员日常 业内热门技术发展 持续更新... Java Java基础 网络传输协议 集合容器 反射泛 ...

  3. Java 虚拟机(JVM)面试题(2021最新版)

    点击下方公众号「关注」和「星标」 回复"1024"获取独家整理的学习资料! Java内存区域 说一下 JVM 的主要组成部分及其作用? JVM包含两个子系统和两个组件,两个子系统为 ...

  4. Java知识体系整理(2021最新版)

    预计2021年9月底初步完成 目录 一.基本知识 二.Java基础 三.常用技术杂记 四.开发框架 五.分布式 六.兴趣场景 七.其他技术涉略 八.其他 九.面试题 1)面试题-Java基础 2)面试 ...

  5. 【2021最新版】Java多线程并发面试题总结(108道题含答案解析)

    文章目录 JAVA并发知识库 1.Java中实现多线程有几种方法? 2.继承Thread类 3.实现Runnable接口. 4.ExecutorService.Callable.Future有返回值线 ...

  6. 【金三银四】Java集合面试题(2021最新版)

    目录 前言 一.集合容器概述 1. 什么是集合 2. 集合的特点 3. 集合和数组的区别 4. 使用集合框架的好处 5. 常用的集合类有哪些? 6. List,Set,Map三者的区别? 7. 集合框 ...

  7. 2021最新版谷歌卫星地图已出炉,纯免费下载

    2021最新版谷歌卫星地图资源已经更新,可免费下载,建议Z发收藏! 获取方法: 1.下载图新地球电脑端www.tuxingis.com或者手机端外业精灵app: 2.导入网盘图源文件就可以正常浏览谷歌 ...

  8. 泛955、不加班、双休的公司名单来了!2021最新版!

    开始今天的正菜之前,我想先分享一个最近在知乎上看到的很奇葩的问题.大致意思就是:"我自己讨厌计算机这种要终身学习并且会经历 996 生活的专业,我却让朋友学计算机". 当时,看到这 ...

  9. 安卓逆向-KG音乐2021最新版下载接口分析

    安卓逆向-KG音乐2021最新版下载API分析 安卓逆向-KG音乐最新版API Java代码实现 后记 安卓逆向-KG音乐最新版API 吐槽一下,相对于其他几个大型音乐平台讲,KG音乐的API设计非常 ...

最新文章

  1. 单用户模式迁移home家目录
  2. UpdateProgress 控件--用户中断
  3. 排球积分程序(三)——模型类的设计
  4. Python+Opencv颜色和形状检测
  5. echart移上去显示内容_echarts如何移动到柱状图上显示自己想显示的提示信息
  6. std::make_unique和 std::make_shared区别
  7. 将DataTable 写入XML
  8. 12佳精美的国外 Flash 网站模板下载(附源文件)
  9. word文档中在文字的右上角加标注快捷键
  10. RN:真机调试无线调试
  11. Ubuntu 16.04安装32bit支持
  12. 3D可视化色彩设计大揭秘
  13. 职称计算机代码表,全国职称计算机考试科目及科目代码
  14. 3D渲染技术分享:用实时反射Shader增强画面颜值
  15. FTP文件传输协议与部署,包括Linux系统、Windows系统和H3C路由交换设备部署
  16. linux 使用rename命令批量重命名文件
  17. 语雀知识库 2.0 上线,让表达更自由
  18. 移动安全学习笔记——组件安全之组件暴露导致的安全问题(含实验)
  19. 对技术的态度(酷壳)
  20. [模仿]html5游戏_FlyppyBird

热门文章

  1. 安装fbterm解决ffy下的中文乱码
  2. 【2022研电赛】技术赛华南区一等奖:基于改进GoogLeNet的瘢痕色泽和血管分布评估系统
  3. Sonar错误 Invoke method(s) only conditionally
  4. @ConditionalOnProperty的作用和用法
  5. 软件测试5分钟解决银行借贷笔试题
  6. 【Mac系统重置网络】
  7. 微信公众号文章排版需要注意的两个小细节
  8. phpems用户名是什么_利用PHPEMS搭建在线考试平台(一)
  9. Unity手游开发札记——我们是如何使用Lua来开发大型游戏的?(上)
  10. Crash日志,分析专用