Java MySQL数据库面试题(二)

Java MySQL数据库面试题(二)

  • 前言
  • 1、说下Innodb和 myisam的区别吗?
    • Innodb引擎:
    • myisam引擎:
  • 2、MySQL 如何优化 DISTINCT?
  • 3、如何查询表第1000到1020条记录?
  • 4、可以使用多少列创建索引?
  • 5、NOW()和 CURRENT_DATE()有什么区别?
  • 6、什么是非标准字符串类型,以及长度?
  • 7、什么是通用 SQL 函数?
  • 8、MySQL 里记录货币用什么字段类型好?
  • 9、MySQL 有关权限的表都有哪几个?
  • 10、MySQL 数据库一天五万条以上的增量,预计运维三年,怎么优化?
  • 11、索引的目的是什么?
  • 12、索引对数据库系统的负面影响是什么?
  • 13、为数据表建立索引的原则有哪些?
  • 14、什么情况下不宜建立索引?
  • 15、Myql 中的事务回滚机制概述:
  • 16、什么是存储过程?用什么来调用?
  • 17、什么是基本表?什么是视图?
  • 18、MYSQL二阶段提交?
  • 19、什么是索引覆盖、回表、索引下推?
  • 20、MySQL 中 InnoDB 支持的四种事务隔离级别名称?
  • 21、mysql语句执行顺序是什么样的?
  • 22、mysql语句底层执行过程?
  • 23、你们mysql用了集群吗?
  • 24、联合索引abc怎么生效,ac 或者ab生效吗?
  • 25、mysql里的索引操作语句?
  • 26、char(30)和varchar(30)的区别?
  • 27、索引的建议?
  • 总结


前言

最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。

如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!

1、说下Innodb和 myisam的区别吗?

Innodb引擎:

Innodb是基于聚簇索引建立的,支持事务、外键,并且通过MVCC来支持高并发,索引和数据存储在一起。
InnoDB将一张表的结构和内容分为两个文件:
1、表结构文件,后缀名为 .frm
2、数据、索引在一个文件,后缀名为 .ibd

myisam引擎:

1)支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用;
2)不支持外键,并且索引和数据是分开存储的。
MyISAM将一张表的结构和内容分为三个文件:

  • 1、表结构文件,后缀名为 .frm
  • 2、索引文件,后缀名为 .MYI(MYIndex)
  • 3、数据文件,后缀名为 .MYD(MYData)

2、MySQL 如何优化 DISTINCT?

MysqL把distinct优化为group by,在需要去重的列上创建索引,然后扫描索引, 可以快速定位数据。

3、如何查询表第1000到1020条记录?

  • 1)SELECT * FROM sys_user LIMIT 1000,20;
  • 2)SELECT * FROM sys_user WHERE id > 999 LIMIT 20;

4、可以使用多少列创建索引?

任何标准表最多可以创建 16 个索引列。

5、NOW()和 CURRENT_DATE()有什么区别?

  • NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。
  • CURRENT_DATE()仅显示当前年份,月份和日期。

6、什么是非标准字符串类型,以及长度?

  • 1、TINYTEXT: 2^8;
  • 2、TEXT: 2^16;
  • 3、MEDIUMTEXT: 2^24;
  • 4、LONGTEXT: 2^32。

7、什么是通用 SQL 函数?

  • 1、CONCAT(A, B):通常用于将两个或多个字段拼接在一起;
  • 2、CONCAT_WS(‘-’, A, B):通常用于将两个或多个字段拼接在一起,但可以指定一个分隔符;
  • 3、FORMAT(N, D):可以将数据格式化为整数或者带几位小数(四舍五入);
  • 4、CURRDATE()/CURRTIME():返回当前日期/时间;NOW():返回当前日期+时间;
  • 5、YEAR/MONTH/DAY/WEEK/WEEKDAY(date):从日期值中提取给定数据;
  • 6、HOUR/MINUTE/SECOND(date):从时间值中提取给定数据;
  • 7、DATEDIFF(date1,date2):确定计算两个日期之间的天数;
  • 8、SUBTIMES(date1,date2):用于计算两个时间的差值。

8、MySQL 里记录货币用什么字段类型好?

NUMERIC(a,b)和 DECIMAL(a,b)
都有两个参数,前面一个参数为总的位数,后面一个参数是小数点后的位数。

9、MySQL 有关权限的表都有哪几个?

MySQL通过权限表来控制用户对数据库的访问,权限表存放在 MySQL数据库里,由 MySQL_install_db 脚本初始化。
这些权限表分别 user,db,table_priv, columns_priv 和 host。

10、MySQL 数据库一天五万条以上的增量,预计运维三年,怎么优化?

  • 1、设计良好的数据库结构,允许部分数据冗余,尽量避免 join 查询,提高效率。
  • 2、选择合适的表字段数据类型和存储引擎,适当的添加索引。
  • 3、MySQL 库主从读写分离。
  • 4、添加缓存机制,比如 memcached,apc 等。
  • 5、不经常改动的页面,生成静态页面。

11、索引的目的是什么?

  • 1、可以提高查询速度;
  • 2、创建唯一性索引,保证数据库表中每一行数据的唯一性;
  • 3、可以减少查询中分组和排序的时间。

12、索引对数据库系统的负面影响是什么?

  • 1、创建索引和维护索引需要耗费性能,随着数据量的增加而增加;
  • 2、索引需要占用物理空间;
  • 3、对表数据进行增/删/改操作时,索引也要动态维护,降低了表数据的维护速度。

13、为数据表建立索引的原则有哪些?

  • 1、在频繁使用的、可以缩小查询范围的字段上建立索引;
  • 2、在频繁使用的、需要排序的字段上建立索引。

14、什么情况下不宜建立索引?

  • 1、对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引;
  • 2、对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。

15、Myql 中的事务回滚机制概述:

  • 事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。
  • 要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚

16、什么是存储过程?用什么来调用?

  • 存储过程是一个预编译的 SQL 语句,就是说只需要创建一次,可以调用多次。
  • 如果某次操作需要执行多次 SQL,使用存储过程比单纯 SQL 语句执行要快很多。
  • 可以用一个命令对象来调用存储过程。
CREATE PROCEDURE <过程名> BEGIN <SELECT语句> END;

17、什么是基本表?什么是视图?

  • 基本表:是指mysql中一个个独立的表。
  • 视图:是指一个或几个基本表导出的表,视图本身不独立存储在数据库中,是一个虚表。
    视图能够简化用户的操作,保证数据库的安全。
CREATE VIEW <视图名> AS <SELECT语句>;

18、MYSQL二阶段提交?

执行流程:

  • 1、mysql执行器想要更新记录A,此时开启事务,然后InnoDB引擎会把记录A加载到缓冲池buffer poll;
  • 2、把记录A的旧值写入undo log,便于回滚;
  • 3、执行器更新内存中的数据,同时把数据写入redo log中,此时redo log处于prepare准备状态,到这里是一阶段提交;
  • 4、然后执行器把所有操作记录都写入到bin log中,然后提交事务,同时把redo log状态改成commit提交状态,到这里,mysql二阶段提交就算完成了。
    (binlog:主从复制、数据恢复、增量备份;undo log:数据回滚;redo log:事务持久化)

19、什么是索引覆盖、回表、索引下推?

  • 索引覆盖:指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取;
    回表:主键索引树的叶子节点直接就是我们要查询的整行数据,而非主键索引的叶子节点是主键的值,查到主键的值以后,还需要再通过主键的值再进行一次查询。
  • 索引下推(MySQL 5.6支持):
    应用点:针对非主键索引上的优化。
    如果没有索引下推优化(或称ICP优化),当进行索引查询时,首先根据索引来查找记录,然后再根据where条件来过滤记录;在支持ICP优化后,MySQL会在取出索引的同时,判断是否可以进行where条件过滤再进行索引查询,这样可以减少回表次数,从而提升整体性能。

20、MySQL 中 InnoDB 支持的四种事务隔离级别名称?

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

  • 1、read uncommited :读未提交;
  • 2、read committed:读已提交;
  • 3、repeatable read:可重复读;
  • 4、serializable :串行事物。

21、mysql语句执行顺序是什么样的?

from -> join -> on -> where -> group by -> avg,sum,max,min,count -> having -> select -> distinct -> order by -> limit

22、mysql语句底层执行过程?

Mysql整体分为三部分,客户端Client、服务端Server层和存储引擎层:

  • 1.连接器:权限校验用户名与密码;
  • 2.查询缓存:命中则直接返回结果;
  • 3.分析器:进行词法和语法分析,比如select 表示查询语句;
  • 4.优化器:比如在表里面有多个索引时,选择效率最高的索引,或者多表关联时,优化各个表的连接顺序;
  • 5.执行器:操作存储引擎层,去寻找符合条件的数据,并且返回给客户端。

23、你们mysql用了集群吗?

没有,我们用的主从同步,master/slave,主库开启binlog,采用row行同步方式,主库一个线程去写入binlog里;从库一个线程从主库的binlog同步到本地的中继日志(relay log),然后再用一个线程从中继日志同步数据到本地数据库。

24、联合索引abc怎么生效,ac 或者ab生效吗?

  • 生效:where/order 单独使用和顺序无关(mysql会自动优化),一起使用要保证abc顺序;
  • 不生效:不满足最左原则或用使用了大于小于,后面的索引列不生效。

25、mysql里的索引操作语句?

  • 查看索引:
SHOW INDEX FROM 表名;

1、添加索引:

ALTER TABLE 表名 ADD INDEX 索引名 (列名);**或者** CREATE INDEX 索引名 ON 表名 (列名);

1、删除索引:

ALTER TABLE 表名 DROP INDEX 索引名; **或者** DROP INDEX 索引名 ON 表名 (列名);

26、char(30)和varchar(30)的区别?

  • varchar(30):保存实际字符长度,最大为30;
  • char(30):不管你保存的字符数是多少,它都固定占用30个字节的存储空间;
  • char(30)占用空间更多,但是因为长度固定,运算时速度更快。
    使用modify column改为varchar会产生内存碎片。

27、索引的建议?

  • 1、在数据量大的情况下能够极大地提高查询效率,但创建索引是有代价的,它会增加磁盘空间的使用,并且在插入、更新和删除数据时,可能会降低性能,因为索引也需要维护的。
  • 2、创建索引的建议:
    1)不要在数据变化很频繁的列上创建索引。
    2)对于查询中经常出现的列或条件,应考虑创建索引。
    3)复合索引应根据查询的WHERE子句和JOIN的顺序来确定列的顺序。
    4)索引的选择性(不重复值的数量与总行数的比例)越高,索引的效果越好。
    5)尽量使用覆盖索引(查询列直接在索引中),这样可以避免回表查询提高效率。

总结

都已经看到这里啦,赶紧收藏起来,祝您工作顺心,生活愉快!

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

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

相关文章

Flutter整体框架

Flutter整体框架由三部分组成&#xff1a;Framework、Engine和Embedder。 Framework Framework提供了一个用 Dart 语言编写的现代、反应式框架&#xff0c;由许多抽象的层级组成。它包括一套丰富的布局、动画、绘制、手势UI组件及配套代码&#xff0c;以及更基础的异步、文件、…

李沐动手学习深度学习——4.5练习

1. 在本节的估计问题中使用λ的值进行实验。绘制训练和测试精度关于λ的函数。观察到了什么&#xff1f; 修改代码运行如图所示&#xff0c;可以发现对于lamda值的变化而言&#xff0c;对于训练loss和测试loss的影响不大。但是如果λ 太大后&#xff0c;train和test的loss会变得…

WPF 控件模板

控件模板 WPF的 ControlTemplate 是一种用于定义和自定义控件的外观和结构的模板&#xff0c;它可以完全替换控件的默认模板&#xff0c;实现个性化和复杂的效果。WPF 的 ControlTemplate 有以下几个特点: ControlTemplate 是一个 XAML 元素&#xff0c;它可以包含任何类型的 U…

重拾C++之菜鸟刷算法第7篇---二叉树(上)

二叉树 理论基础 次序关系 前中后序 ( VLR, LVR, LRV ) VLR: 前表示根节点在前面&#xff0c;遍历顺序即中左右 LVR: 中表示根节点在中间&#xff0c;遍历顺序即左中右 LRV: 后表示根节点在后面&#xff0c;遍历顺序即左右中 遍历方式 DFS &#xff08;深度优先遍历&…

Databend 开源周报第 134 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持多语句事务…

基于dashscope在线调用千问大模型

前言 dashscope是阿里云大模型服务平台——灵积提供的在线API组件。基于它&#xff0c;无需本地加载大模型&#xff0c;通过在线方式访问云端大模型来完成对话。 申请API key 老规矩&#xff1a;要想访问各家云端大模型&#xff0c;需要先申请API key。 对于阿里云&#x…

STM32(14)USART

USART:一种片上外设&#xff0c;用来实现串口通信&#xff0c;就是stm32内部的串口 USART简介 串并转换电路 串行通信和并行通信 串行&#xff1a;一根数据线&#xff0c;逐个比特位发送 为什么要串并转换 移位寄存器 USART的基本模型 通过查询SR&#xff08;状态寄存器&…

简介IP地址证书如何申请

IP地址证书通常包含在SSL/TLS证书中&#xff0c;根据验证级别可分为域名验证型(DV)、组织验证型(OV)。对于直接绑定IP地址的场景&#xff0c;需选择支持IP地址验证的SSL证书。 跟常见的域名证书一样&#xff0c;IP地址证书在申请过程中同样需要验证IP的所有权&#xff0c;常见的…

Go语言基础

简介 Go语言&#xff08;也称为Golang&#xff09;是一种静态类型、编译型语言&#xff0c;由Google的Robert Griesemer、Rob Pike和Ken Thompson于2007年设计&#xff0c;首次公开发布于2009年。Go的设计初衷是解决当时谷歌内部面临的软件开发问题&#xff0c;特别是在处理大…

Sublime Text4代码配色自定义方案

文章目录 前言Settings设置效果图 前言 关于Sublime Text对于我的使用体验&#xff0c;只能说内置的代码主题真的都太low了&#xff0c;一点都不好看。所以接下来我分享一下我自定义代码配色。当然&#xff0c;大家也可以通过我给的中文翻译注释来自定义自己喜欢的颜色。废话不…

Linux 设置快捷命令

以ll命令为例&#xff1a; 在 Linux 系统上&#xff0c;ll 命令通常不是一个独立的程序&#xff0c;而是 ls 命令的一个别名。 这个别名通常在用户的 shell 配置文件中定义&#xff0c;比如 .bashrc 或 .bash_aliases 文件中。 要在 Debian 上启用 ll 命令&#xff0c;你可以按…

神经网络结构——CNN、RNN、LSTM、Transformer !!

文章目录 前言 一、什么是CNN 网络结构 解决问题 工作原理 实际应用 二、什么是RNN 网络结构 解决问题 工作原理 应用场景 三、什么是LSTM 网络结构 解决问题 工作原理 应用场景 四、什么是Transformer 网络结构 解决问题 工作原理 BERT GPT 前言 本文将从什么是CNN&#xff1…

一个完整的Flutter项目的基本构成

目录 1.页面跳转2.本地数据库和读取2.1 在pubspec.yaml中添加数据库框架依赖2.2 创建db.dart 初始化数据库并创建表2.3 安装JsonToDart插件2.4 创建实体类 user_bean.dart2.5 增删改查&#xff1a; 3.网络请求数据解析UI渲染 本篇主要总结下一个完整的Flutter项目有哪些基本构成…

徐工集团与宁夏天元锰业集团召开战略合作会议

2024年3月3日&#xff0c;徐工集团党委书记、董事长杨东升一行考察宁夏天元锰业集团&#xff0c;并举行战略合作会议。宁夏天元锰业集团董事局主席贾天将及相关高管参加会议。双方围绕绿色低碳、智能化和信息化推进新一轮机械设备“以旧换新”&#xff0c;物流运输和矿山开采设…

【SpringBoot3】Spring Boot Event 自定义事件的发布与监听

一、基本概况 1、什么是SpringBoot自定义事件 Spring Boot自定义事件是Spring框架中事件处理机制的一种扩展&#xff0c;它允许开发者在Spring Boot应用程序中定义、发布和监听自己的事件。这些事件可以用于在应用程序的不同组件之间进行通信&#xff0c;实现解耦和异步处理。…

VSCode通过SSH连接Docker环境进行开发

文章目录 VSCode 插件Docker 镜像构建镜像部署环境 VSCode 连接本地Docker容器VSCode SSH连接Docker容器VSCode 打开容器内目录文件 VSCode 插件 Remote - SSH Docker 镜像 https://hub.docker.com/_/golang # Golang 镜像 docker pull golang:1.22构建镜像 Dockerfile F…

【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 3

【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 3 文章目录 前言一、创建controller相关二、编译测试三、测试运行测试forward_position_controller测试forward_velocity_controller测试forward_acceleration_controller总结前言 本篇文章在上篇文章的基础…

ThreadPoolExecutor 学习

ThreadPoolExecutor 是开发中最常用的线程池&#xff0c;今天来简单学习一下它的用法以及内部构造。 1、线程池存在的意义&#xff1f; 一般在jvm上&#xff0c;用户线程和操作系统内核线程是1&#xff1a;1的关系&#xff0c;也就是说&#xff0c;每次创建、销毁线程的时候&am…

day05-网络编程

1>广播 #include "test.h"#define SER_IP "192.168.42.106" #define SER_PORT 8888int main(int argc, const char *argv[]) {int sfd socket(AF_INET, SOCK_DGRAM, 0);if(sfd -1){perror("socket error");return -1;}int broadcast 1; i…

Python基础:标准库 -- Time 时间的访问和转换

1. 官方文档 time --- 时间的访问和转换 — Python 3.12.2 文档 2. 准备知识 协调世界时 UTC (Coordinated Universal Time) 协调世界时&#xff08;Coordinated Universal Time&#xff0c;UTC&#xff09;&#xff0c;是一种国际标准的时间表示方式。UTC 是以原子钟为基础…