22道Mysql面试真题和答案

news2024/11/28 16:36:51

本专栏记录Java后端开发相关的面试题,欢迎大家阅读专栏的其他文章。

1.请介绍下联合索引的最左匹配原则

  • 建立一个联合索引(a,b,c),相当于建立多个索引(a)(a,b)(a,b,c)
  • 索引排序是从左到右匹配的,即索引查找顺序为 a -> b -> c
  • 如果直接查询b,则不符合最左原则,会直接遍历查询所有节点

联合索引的优点

  • 减少索引树的个数,减小空间开销
  • 提高索引查询效率

2.什么叫回表查询

        索引分为聚集索引和普通索引,聚集索引的叶子节点是行记录信息,普通索引的叶子节点是索引字段值。

        普通索引搜索到叶子节点,获取到索引字段值,需要回到聚集索引树,找到对应的行记录,这个过程叫回表查询

3.普通索引和唯一索引的区别?

  • 对于查询操作,两者都是从索引树查询,没有区别
  • 对于更新操作,唯一索引需要先将加载到内存,判断是否有冲突,性能比普通索引差

4.聚集索引和非聚集索引的区别?

定义

  • 聚集索引:聚集索引的逻辑顺序决定了存储的物理顺序,
  • 非聚集索:非聚集索引的逻辑顺序不对应存储的物理顺序

区别

 1.使用场景

  • 聚集索引:适用于经常搜索范围值的场景
  • 非聚集索引:适用于频繁删除和修改的场景

 2.叶子节点区别

  • 聚集索引:叶子节点是数据节点
  • 非聚集索引:叶子节点不是数据节点,是指向数据块的指针

5.JDBC访问数据库的基本步骤是什么

        加载驱动 -> 通过DriverManager获取连接connection -> 通过连接创建会话 -> 通过会话进行数据的增删改查 -> 关闭资源。

6.说说事务的概念,在JDBC编程中处理事务的步骤

6.1 什么是事务

        作为一个工作单元执行的一系列数据库操作。

6.2 事务的特性

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

7.数据库连接池的原理,为什么要使用连接池

7.1 原理

        数据库连接池的基本思想就是为数据库建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕再放回去。

7.2 使用连接池的原因

  • 可以设置连接池最大连接数量来防止系统与数据库无止境的连接;
  • 可以通过连接池监控数据库的连接数量、使用情况;
  • 避免了反复地创建和销毁数据库连接,提高了访问效率。

8.说一下 MySQL 执行一条查询语句的内部执行过程?

  1. 通过连接器连接到mysql服务器
  2. 查看缓存,有则返回
  3. 分析器进行语法分析
  4. 优化器对查询语句进行优化
  5. 执行器进行查询

9.一张自增表中有三条数据,删除两条数据之后重启数据库,再新增一条数据,此时这条数据的 ID 是几?

  • 如果数据库引擎是InnoDB,则ID为2
  • 如果数据库引擎是MyISAM,则ID为4

原因:InnoDB将自增最大ID放在内存,重启后内存内容丢失;MyISAM将自增最大ID放在数据文件,重启不会造成自增ID丢失

10.MySQL 是如何处理死锁?

  1. 通过 innodb_lock_wait_timeout 来设置超时时间,一直等待直到超时
  2. 发起死锁检测,发现死锁之后,主动回滚死锁中的某一个事务,让其他事务继续执行。

11.MySQL的四种事务隔离级别

12.数据库的DDL和DML的用法和区别?

定义

  1. DDL是数据定义语言,专门对表、数据库进行定义,如create、alter、drop、truncate等都会直接影响到表结构
  2. DML是数据操纵语言,如delete、insert、select等操作,只会影响表数据内容,不会影响结构

区别

 DML需要手动开启和提交事务,可以回滚;DDL是隐性提交的,不能回滚        

13.preparedStatement和Statement的区别

        preparedStatement继承于Statement,具有Statement的所有方法,同时它还添加了一系列方法来提高执行效率和安全性。

preparedStatement效率比Statement高

        在需要多次使用同一个SQL语句时,使用preparedStatement效率高,因为preparedStatement运行前经过了预编译。

preparedStatement安全性更高

        在有参数输入的情况下,preparedStatement使用占位符“?”来代替,在每次执行该语句时,使用相关set方法写入参数,防止了SQL注入攻击。

14.存储引擎 InnoDB 和 MyISAM 有什么区别?

  • 事务:InnoDB支持事务,MyISAM不支持事务
  • 锁粒度:InnoDB支持行级锁,MyISAM不支持行级锁,只支持表锁
  • 外键:InnoDB支持外键,MyISAM不支持外键
  • 查询:InnoDB主键查询性能高于MyISAM

15.什么是独立表空间和共享表空间?它们的区别是什么?

  • 共享表空间:数据库的所有表数据、索引文件都存放在一个文件中,一个表删除了空间不会清除
  • 独立表空间:每一个表都存储在不同的文件中,表删除会清除空间

16.把一个 InnoDB 表的主键删掉,是不是就没有主键,就没办法进行回表查询了?

        不是,如果删掉了主键,InnoDB会自己添加一个长度为6字节的rowId作为主键

17.MySQL查询缓存的优缺点

        优点:如果查询缓存有需要的数据,会直接返回,提高查询效率

        缺点:查询缓存频繁失效,任何更新表的操作都会造成缓存失效,缓存命中率降低

18.JDBC的ResultSet是什么?

        在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。默认的ResultSet是不能更新的,游标也只能往下移。也就是说你只能从第一行到最后一行遍历一遍。

19.Mysql如何进行sql分页查询?

语法:
select * from tableName where 条件 limit 每页大小 offset 起始行下标

示例:
select * from answer limit 3 OFFSET 1

20.JDBC的DriverManager是用来做什么的?

        JDBC的DriverManager是一个工厂类,我们通过它来创建数据库连接。当JDBC的Driver类被加载进来时,它会自己注册到DriverManager类里面,DriverManager会使用注册到它里面的驱动来获取数据库连接,并返回给调用的程序。

21.什么是幻读,哪种隔离级别可以防止幻读?

        幻读是指一个事务多次执行一条查询返回的却是不同的值。SERIALIZABLE(锁表)隔离级别才能防止产生幻读。

22.什么是脏读?哪种数据库隔离级别能防止脏读?

        脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

        以下隔离级别可以防止脏读

  1. READ_COMMITTED(锁定正在读取的行)
  2. REPEATABLE_READ(锁定所读取的所有行)
  3. SERIALIZABLE(锁表)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/952064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊宣布弃用低代码,Honeycode 服务即将停止。

AWS 宣布终止低代码服务 Honeycode。新客户不能注册或升级账户计划,现有客户的应用程序将在 2024 年 2 月 29 日前继续运行。在 2023 年 7 月 31 日之后,用户将不再需要支付 Honeycode 使用费。 Honeycode 是一项于2020年6月推出的完全托管服务&#xf…

C语言网络编程实现组播(多播)

1、组播IP划分 224.0.0.0~224.0.0.255 为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用; 224.0.1.0~224.0.1.255 是公用组播地址,可以用于Inter…

春秋云镜 CVE-2018-2894

春秋云镜 CVE-2018-2894 Weblogic 任意文件上传漏洞 靶标介绍 Oracle Fusion Middleware 的 Oracle WebLogic Server 组件中的漏洞(子组件:WLS - Web Services)。受影响的受支持版本包括 12.1.3.0、12.2.1.2 和 12.2.1.3。易于利用的漏洞允…

怎样做一个知识库网站

经济和信息技术的蓬勃发展,知识资源成为了企业非常重要的无形资产。 当前,企业的核心竞争力不仅取决于硬件设备、财务实力、资源多寡、人员数量等生产因素,更加取决于企业对于知识的掌握、运用、传承和创新。 制作企业知识库,传…

静态路由(详细理解+实例精讲)

系列文章目录 华为数通学习(6) 前言 一,静态路由 二,静态路由配置 三,缺省路由 四,缺省路由应用场景 总结 前言 随着华为公司的不断发展,数据通信这门技术也越来越重要,很多人…

js数据类型?如何判断js数据类型?

在JavaScript中,有以下几种数据类型: 基本数据类型(Primitive Data Types): String(字符串):表示文本数据,使用引号(单引号或双引号)括起来。Numb…

Android自定义view流程

Android自定义view流程,主要目的是总结实现过程中的思路以及一些需要注意的地方。 首先,我们先来看一张效果图: 实现逻辑 重新指定View宽高绘制外圆圆弧背景及进度绘制中圆圆弧背景及进度绘制内圆圆弧背景及进度 知识点 onMeasure 用于测量View的大小…

读SQL学习指南(第3版)笔记08_视图和索引

1. 精心设计的应用程序通常会在保持实现细节私有的同时公开公有接口,以便未来在不影响最终用户的情况下修改设计 2. 视图 2.1. 不同于数据表,视图并不涉及数据存储,不用担心视图会填满你的磁盘空间 2.2. 一种数据查询机制 2.3. 从用户的视…

基于swing的中国象棋java小游戏jsp源代码Mysql

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、主要功能 可以实现双人下棋,可以悔棋,可…

R语言其他相关函数(各函数解析含实例,可供查询)

目录 一.函数相关 1.函数定义:function 2.调用文件:source 3. Call 4.Recall 5.browser 6.debug和undebug 7.trace 8.traceback 9.options 10.missing 11.nargs 12.stop 13.指定退出时执行的表达式 14.expression和eval 15.system.time 16. invisi…

Springboot+mybatis-plus+dynamic-datasource 切换数据源失败问题总结

Springbootmybatis-plusdynamic-datasourceDruid 多数据源 切换数据源失败总结 文章目录 Springbootmybatis-plusdynamic-datasourceDruid 多数据源 切换数据源失败总结0.前言1. dynamic-datasource 切换数据源失败场景总结1. spring-batch整合情况下切换数据源异常解决办法&am…

Matlab图像处理-图像缩放

基本概念 图像缩放是指将给定的图像在x轴方向按比例缩放a倍,在y轴方向按比例缩放b倍,从而获得一幅新的图像。 如果ab,即在x轴方向和y轴方向缩放的比率相同,则称这样的比例缩放为图像的全比例缩放。 如果a≠b,图像比…

Spring: HiddenHttpMethodFilter的用法及原理

作用&#xff1a;将html表单提交的post请求转换为put请求或delete请求发给接口。 html不支持put和delete. 一、web.xml中配置过滤器 <filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenH…

认识SQL sever

目录 一、数据库的概念 1.1数据库的基本概念 1.2对数据库的了解 二、数据库的分类 2.1关系型数据库&#xff08;RDBMS&#xff09;&#xff1a; 2.2非关系型数据库&#xff08;NoSQL&#xff09;&#xff1a; 2.3混合数据库&#xff1a; 2.4数据仓库&#xff1a; 2.5嵌…

二叉树中的堆

堆的概念和结构 大堆&#xff1a; 树中的任何一个父亲都大于等于孩子 小堆&#xff1a; 树中的任何一个父亲都小于等于孩子 堆在逻辑上是二叉树来存储的&#xff0c;就是在我们的想象中他是按二叉树来存储的&#xff0c;但是在实际上&#xff0c;它是以数组的形式来存储的&…

软考A计划-网络工程师-复习背熟-路由器与交换配置和网络安全

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

移动端如何适配不同的屏幕尺寸

在移动端开发中&#xff0c;适配不同的屏幕尺寸是一个重要的考虑因素。以下是一些常用的方法来实现移动端的屏幕适配&#xff1a; 使用响应式布局&#xff1a;使用CSS媒体查询和弹性布局来根据屏幕尺寸调整页面布局和元素大小。通过设置百分比、em或rem单位来实现元素的相对大小…

ICCV 2023 | 港中文MMLab: 多帧光流估计模型VideoFlow,首次实现亚像素级别误差

本文提出了一个多帧光流估计模型 VideoFlow&#xff0c;旨在充分挖掘视频中的时序信息和运动规律&#xff0c;避免当前主流方法只以两帧图片作为输入而面临的信息瓶颈&#xff0c;显著提升了光流估计的性能。 在公开的 Sintel Bechmark 上&#xff0c;VideoFlow 在 Clean 和 Fi…

过期订单关闭

由于Redis具有过期监听的功能&#xff0c;于是就有人拿它来实现过期订单关闭&#xff0c;但是这个方案并不完美。今天来聊聊11种实现订单定时关闭的方案&#xff0c;总有一种适合你&#xff01; 在电商、支付等系统中&#xff0c;一般都是先创建订单&#xff08;支付单&#x…

七牛云OSS存储

前言: 七牛云的存储项目的附件,需要开发一套七牛云的工具类,可以使用该工具类进行七牛云服务器进行文件的上传与下载操作; 七牛云的文档学习: 相关的依赖项的配置: <dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-s3…