Java面试题mysql

文章详细阐述了MySQL数据库的一些核心概念,包括数据库的三大范式、权限表、Binlog的格式、MyISAM与InnoDB存储引擎的对比、索引的类型和优缺点、事务隔离级别以及不同存储引擎的特性。同时提到了索引的创建和使用注意事项,以及数据删除策略和查询优化方法。
摘要由CSDN通过智能技术生成

MySQL 

1、据库三大范式是什么 

  第一范式:每个列都不可以再拆分。 

  第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部 分。 

  第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键  在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我们经常会为了性能而妥协数据库的设计。 

2MySQL 有关权的表都有哪几个 

MySQL服务器通过限表来控制用户对数据库的访问,权限表存放mysql数据库里,mysql_install_db脚本初始化。这些权限表分userdbtable_privcolumns_privhost。下面分别介绍一下这些表的结构和内容: 

  user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的 

  db权限表:记录各个帐号在各个数据库上的操作权限 

  table_priv权限表:录数据表级的操作权限 

  columns_priv权限:记录数据列级的操作权限。 

  host权限表:配db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限 表不GRANTREVOKE语句的影响 

3MySQL  Binlog 有有几种录入格式?分别有什么区别? 

有三种格式,statementrowmixed 

  statement模式下,每一条会修改数据sql都会记录binlog。不需要记录每一行 的变化,减少binlog日志量,节约IO,提高性能。由sql的执行是有上下文的, 因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录 复制。 

  row级别下,不记sql语句上下文相关信息,仅保存哪条记录被修改。记录单元为每一 行的改动,基本是可以全部记下来但是由于很多操作,会导致大量行的改(alter table),因此这种模式的文件保存的信息太多,日志量太大 

  mixed,一种折中的案,普通操作使statement记录,当无使statement的时 候使row 

4MySQL 存储引擎 MyISAM  InnoDB 区别 

  锁粒度方面:由于锁粒度不同,InnoDBMyISAM支持更高的并发;InnoDB 的锁粒度 为行锁、MyISAM的锁粒度为表锁、行锁需要对每一行进行加锁,所以锁的开销更大,但 是能解决脏读和不可重复读的问题,相对来说也更容易发生死 

  可恢复性上:由InnoDB是有事务日志的,所以在产生由于数据库崩溃等条件后,可以 根据日志文件进行恢复。MyISAM 则没事务日志。 

  查询性能上:MylSAM要优InnoDBInnoDB在查询过程中是需要维护数据缓 存,而且查询过程是先定位到行所在的数据块,然后在从数据块中定位到要查找的;  MyISAM 可以直接位到数据所在的内存地址,可以直接找到数据 

  表结构文件上:MyISAM的表结构文件包括:frm(表结构定义),.MYI(索引),.MYD();  InnoDB的表数据文:ibdfrm(表结构定义) 

5MyISAM 索引与 InnoDB 索引的区别? 

  InnoDB索引是聚簇引,MyISAM索引是非聚簇索 

  InnoDB的主键索引叶子节点存储着行数据,因此主键索引非常高效 

  MyISAM索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据 

  InnoDB非主键索引叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆 盖索引会非常高效。 

6、什么是索引? 

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。 

索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使B树及其变B+树。 

更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。索引是一个文件,它是要占据物理空间的。 

7、索引有哪些优缺点? 

索引的优点 

  可以大大加快数据的检索速度,这也是创建索引的最主要的原因 

  通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能 

索引的缺点 

  时间方面:创建索引和维护索引要耗费时间,具体地,当对表中的数据进行增加、删除和 修改的时候,索引也要动态的维护,会降低增//删的执行效率; 

  空间方面:索引需要占物理空间。 

8、索引有哪几种类型? 

  主键索引: 数据列不允许重复,不允许NULL,一个表只能有一主键。 

  唯一索引: 数据列不允许重复,允许NULL值,一个表允许多个列创建唯一索引。 

¡  可以通过 ALTER TABLE table_name ADD UNIQUE (column); 建唯一索引。 ¡  可以通过 ALTER TABLE table_name ADD UNIQUE (column1,column2); 创建唯一 组合索引。 

  普通索引: 基本的索引类型,没有唯一性的限制,允许NULL 

¡  可以通ALTER TABLE table_name ADD INDEX index_name (column);创建普通 索引 
¡  可以通ALTER TABLE table_name ADD INDEX index_name(column1,  column2, column3);创建组合索引。 

  全文索引: 是目前搜索引擎使用的一种关键技术。 

¡  可以通ALTER TABLE table_name ADD FULLTEXT (column);建全文索引。 

9MySQL 中有哪种锁 

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

 

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

也最高。 

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

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

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

  read uncommited 读到未提交数据 

  read committed读,不可重复 

  repeatable read重读 

  serializable :串行 

11CHAR  VARCHAR 的区别? 

  CHARVARCHAR类型在存储和检索方面有所不同 

  CHAR列长度固定为建表时声明的长度,长度值范围1255 

  CHAR值被存储,它们被用空格填充到特定长度,检CHAR值时需删除尾随空 格。 

12、主键和候选键有么区别 

表格的每一行都由主键唯一标识,一个表只有一个主键。 

主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以用于任何外键引用 

13、如何在 Unix  MySQL 时间戳之间进行转换? 

UNIX_TIMESTAMPMysql时间戳转换Unix时间戳的命 FROM_UNIXTIME是从Unix时间戳转换Mysql时间戳的命令。 

14MyISAM 表类将在哪里存储,并且还提供其存储格式 

MyISAM表格以三种格式存储在磁盘上 

  “.frm”文件 存储表 

  数据文件具有“.MYDMYData)扩展 

  索引文件具有“.MYIMYIndex)扩展名 

15MySQL 里记录币用什么字段类型好 

NUMERICDECIMAL类型Mysql实现为同样的类型,这SQL92标准允许。他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据。当声明一个类是这些类型之一时,精度和规模的能被(并且通常是)指定。 

例如: 

salary DECIMAL(9,2) 
在这个例子中,9(precision)代表将被用于储值的总的小数位数,2(scale)代表将被用于存储小数点后的位数。 

因此,在这种情况下,能被存储salary中的值的范围是-9999999.999999999.99 

16、创建索引时需要意什么 

  非空字段:应该指定列NOT NULL,除非你想存NULLmysql中,含有空值的 列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。应该 0、一个特殊的值或者一个空串代替空值; 

  取值离散大的字段:(变量各个取值之间的差异程度)的列放到联合索引的前面,可以通 count()函数查看字段的差异值,返回值越大说明字段的唯一值越多字段的离散程度 高; 

  索引字段越小越好:数据库的数据存储以页为单位一页存储的数据越多一IO操作获取 的数据越大效率越高。 

17、使用索引查询一能提高查询的性能吗?为什 

通常,通过索引查询数据比全表扫描要快。但是我们也必须注意到它的代价 

索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改。 这意味着每条记录INSERTDELETEUPDATE将为此多付45 次的磁I/O 因为索需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢。使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用两种情况: 

  基于一个范围的检索,一般查询返回结果集小于表中记录数30% 

  基于非唯一性索引的检索 

18、百万级别或以上数据如何删 

关于索引:由于索引需要额外的维护成本,因为索引文件是单独存在的文,所以当我们对数据的增加,修改,,都会产生额外的对索引文件的操,这些操作需要消耗额外IO,会降低增//删的执行效率。所以,在我们删除数据库百万级别数据的时候,查MySQL官方册得知删除数据的速度和创建的索引数量是成正比的。 

    

所以我们想要删除百万数据的时候可以先删除索引(此时大概耗时三分多钟 
然后删除其中无用数据(此过程需要不到两分钟) 
删除完成后重新创建索引(此时数据较少了)建索引也非常快,约十分钟左右。 与之前的直接删除绝对是要快速很多,更别说万一删除中,一切删除会回滚。那更是坑

了。 

19、什么是最左前缀则?什么是最左匹配原 

顾名思义,就是最左优先,在创建多列索引时,要根据业务需求where子句中使用最频繁的一列放在最左边。 

最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查(><betweenlike)就停止匹配,比a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可用到,a,b,d的顺序可以任意调整。 

=in可以乱序,a = 1 and b = 2 and c = 3 建立(a,b,c)引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式。 

20、什么是聚簇索引何时使用聚簇索引与非聚簇索 

  聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数 

  非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行, myisamkey_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数 据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不 key buffer命中时,速度慢的原因。 

21MySQL  

首先需MySQL客户端登陆能使,所 个连 来连MySQL库,我们 一般使 

mysql-u户名-p密码 
来进MySQL登陆,和服务端立连。在TCP后,连会根据输入用户密码验你的录身如果用名或密码错误MySQL Access denied for user结束执行如果录成MySQL据权限表中的记来判你的权限 

22MySQL  

连接完后,就可SQL了,辑就会到第:缓存 

MySQL在得一个执行请求后会首去查询缓 中查,是否SQL句,前执行过的句以结果key-value形式被直接在内key是查询句,value询的结果 

如果通key够查找到SQL句,妾返SQL的执 

如果语不在询缓,就会续后的执行阶段。执完成,执果就会放入询缓存中 

可以看,如查询缓存,MySQL不需要执行后面复杂作,以直接回结,效率会很高 

23MySQL  

如果没命中询,始执行SQL 

  首先,MySQL会根据你SQL句进,分析会先词法分析,你写SQL由多 个字符和空组成SQLMySQL要识别里面字符什么,表什 

  然后进语法析,词法分的结,语法分析器会据语规则的这个 SQL 语句是MySQL法。如SQL确,就提示 You have an error in your SQL syntax 

24MySQL  

经过分器的法分语法分后,SQL就合法MySQL知道你做什了。但是在执前,需要优化器处理优化器会判断你使用了种索使用了种连,优器的作用是确效率的执行 

25MySQL 

MySQL通过析器知道了你SQL语句法,你要做么操作,通过优器知了该怎么做效最高然后入了执阶段开始执行SQL句在段,MySQL先会判断你有没有行这语句限,没权限话,就会返回没权限错误果有权,就开表续执行。开表时候行器就根据的引擎定义,去使用这引擎的接口对于索引的表,执的逻也差 

26、什么临时,何时除临 

什么是时表?MySQLSQL句的 通常会时创一些中间结集的,临时 表只当前连,在连关闭,临时表会被删并释所有间。 

临时表为两种:一种内存临表,种是临时表什么别呢?存临时使用 MEMORY引擎,而临时表用的MylSAM 存储 

MySQL会在面这几种情况产临时表。 

 

使UNION:UNION种,UNION,一 UNION ALL,它们用于合查询;

区别是使UNION掉两个中的复数据,相当于结果做了 去重(distinct)使UNIONALL,则重,返所有行。使UNION查询产生时表。 

  使TEMPTABLE或者UNION询中视图TEMPTABLE是一种建临表的算 法,它将结放置时表中意味MySQL要先创好一临时,然后结果到临 时表中,然再使个临时进行应的查询 

  ORDER BY GROUPBY句不样时生临时 

  DISTINCT 查询且加ORDER BY; 

  SQL中用SQL_SMALL_RESULT;果查询结果较小时候以加上 SQL SMALL  RESULT优化产生时表 

  FROM中的查询; 

  EXPLAIN 查看行计结果Extra列中使Using Temporary 就表示用到时表 27SQL  

  查询语无论使用判断条等于小于、大于,WHERE侧的查询字不要使用函数 或者表 

  使EXPLAIN令优SELECT查询,对于复杂、率低sql语句,我们常是使  explainsql析这sql句,样方便我们析,进优化。 

  当你SELECT查询语句只需要使用一记录时,要使 LIMIT 1不要接使SELECT* 该使用体需查询字段,为使EXPLAIN分析SELECT"使用的全表描,也 type =all  

  为每一表设ID属性 

  避免MHERE 字段进行 NULL

  判断避WHERE使!> 

  使BETWEEN AND  IN 

  为搜索段创 

  选择正的存引擎InnoDBMyISAMMEMORY 

  使LIKE%abc%会走索引,使LIKE abc%会走索引。 

  对于枚类型字段(有固定列值字段)建议使ENUM 而不VARCHAR如性、星 期、类、类 

  拆分大DELETEINSERT 语句 

  选择合的字类型择标准尽可小、尽可能定长尽可使用 

  字段设尽可使NOT NULL 

  进行水切割者垂 

28、什么外链 

外连接为三,分是左外(LEFT OUTER J0IN LEFT JOIN 连接(RIGHT OUTER JOIN  RIC GHT JOIN、全外(FULL OUTER JOIN   FULLJOIN) 

左外连接:又称左连,这种接方会显示左表不符条件数据右边不合条的数据行直接NULL 

右外连接:也被为右接,他左连相对,这种连接式会示右符合条的数行,左表不符条件数据接显NULL 

29、什么内链 

结合两表中同的,返回联字相符的记录就是链接 

30、使用 union  union all 时需注意些 

unionSQL分别单取出列数必须相同 

使union多个等的行会被并,合升比耗时一般不直接使union 合并,而通常union all 进行 

31MyISAM 储引擎 

5.1本之MyISAMMySQL的默引擎,MylSAM发性比较差使用场景比较少主特点是: 

  不支持务操ACID的特性就不在了一设计为了能和效率考虑的 

  不支持键操,如行增加键,MySQL会报错只不外键不起作用 

  MyISAM 认的锁是表级,所并发性能比较差加锁较快冲突比少,太容易 发生死的情况。 

  MyISAM在磁储三个件,件名名相同扩展分别frm(存储定义) MYD(MYData,存储数)MYI(MyIndex,存储索)。这需要注意的MyISAM只缓  索引件,并数据文件。 

  MyISAM持的型有全索引(Full-Text)B-Tree 索引R-Tree   ¡  Full-Text索引:是为了决针文本糊查询率较的问 

¡  B-Tree索引:有的索引节点都照平树的结构来储,有的索引数据节都在  

¡  R-Tree:存储B-Tree引有一些区别,要设用于空间和维数的字段做引目MySQL版本仅geometry类型的段作引,相对 BTREE,RTREE的优势于范查找。 

  数据库在主如果MyISAM的数容易损,而难以恢复 

  增删改性能:SELECT较高,用于查询较多的 

32InnoDB 引擎的特点 

MySQL5.1之后默认的储引变成InnoDB储引,相MylSAMInnoDB 存储引擎了较的改它的主特点 

  支持事操作具有ACID离特,默的隔离别是重复读(repetable-read)通过 MVCC(发版)实现的能够 脏读  不可复读 题。 InnoDB 支持键操  

  InnoDB 默认锁粒级锁,发性比较好,会发生锁的况。 

  MyISAM一样是,InnoDB存储frm文件存表结,但是同的 InnoDB数据与索引数据是储在起的B+数的子节MylSAM的表数 据和索数据分开的。 

  InnoDB全的日志文件,这日志件用复因数库崩或其他情况导致数据失问 题,保数据一致性。 

  InnoDBMylSAM持的索类型同,但具体实现为文结构同有很差异。 

  增删改性能面,行大量增删操作,推荐使InnoDB,它在除操时是 对行删,不重建表 

MySQL的优化可以从多个方面入手。首先,可以通过优化查询来提高MySQL的性能。这包括使用合适的索引、避免全表扫描、优化查询语句等。其次,可以通过调整MySQL的配置参数来提升性能,例如增加缓冲区大小、调整并发连接数等。此外,还可以考虑使用缓存技术,如使用Redis作为缓存层,减少对数据库的访问。另外,对于大数据量的表,可以考虑分库分表的方式来提高查询效率。总之,MySQL的优化是一个综合性的工作,需要根据具体的场景和需求进行调整和优化。 参考资料: \[1\] 【Java面试总结】MySQL篇·SQL优化篇 \[2\] MySQL 精选 60 道面试题(含答案) \[3\] MySQL如何保证ACID #### 引用[.reference_title] - *1* [【Java面试总结】MySQL篇·优化篇](https://blog.csdn.net/Gherbirthday0916/article/details/129097938)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Java面试题mysql面试题](https://blog.csdn.net/qq_40036754/article/details/126608721)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老歪不歪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值