MySQL面试题整理

mysql面试题here

1. 主键、外键、超键、候选键

比较清晰的解释here

  • 超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以作为超键,多个属性组合在一起也可以作为超键。
  • 候选键:最小超键,没有冗余元素的超键。
  • 主键:数据库表中对存储数据对象予以唯一和完整标识的数据列或者属性的组合。主键是候选键里面的一个,是人为规定的。
  • 外键:在一个表中存在另一个表中的主键,这个主键称为外键

2. 视图的作用

通过here可以比较清晰的理解视图的作用。

视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询,不包含数据;使用视图可以简化复杂的sql操作,隐藏具体的实现细节,同时达到保护数据的目的。简单而言,视图对sql语句进行了封装,可以理解为封装为一个函数,提高了重用性。

应用场景:多个地方用到同样的查询结果;这个查询结果使用的SQL语句比较复杂。

对视图的更新将对其基表进行更新;视图主要用于简化检索,保护数据,并不用于更新,大部分视图都是不可以更新的。

3. drop, truncate, delete区别

  1. delete, truncate是删除表中数据,而drop是删除整张表
  2. delete语句执行删除的时候是每次从表中删除一行,同时将该行的删除操作作为事务记录在日志中保存以便进行回滚操作。truncate则一次性删除表中所有数据并不把单独的删除操作记录写入日志,删除的行是无法恢复的。
  3. 一般而言,删除速度的大小关系为:drop>truncate>delete
  4. delete属于DML,truncate和drop属于DDL。

4. DDL,DML

  • DDL(Data Definition Language):数据定义语言。定义或者改变表的结构,数据类型,表之间的链接和约束等初始化工作中。
  • DML(Data Manipulation Language): 数据操作语言。不改变表的结构,只改变表的内容

5. 数据库索引

here
索引就是根据表中的一列或者若干列按照一定顺序建立的列值与记录行之间的对应关系表,实际上是一张描述索引列的列值与原表中记录行之间一一对应的有序表。

数据库索引是数据库管理系统中的一种数据结构,以协助快速查询表中数据。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这种数据结构以某种方式指向数据,这样就可以在这些数据结构基础上实现高级查找算法,这种数据结构就是索引。

为表设置索引的代价:增加了数据库的存储空间;在插入和修改数据的时候花费的时间增长(因为索引也要改变)

6. MySQL数据库优化思路

6.1. SQL语句优化

  1. 避免在WHERE子句中使用!=, <>操作符,避免在WHERE子句中进行null值判断,否则将导致引擎放弃使用索引而采用全表扫描。可以设置默认值为0,此时查询的时候就可以将 WHERE num is null转化为 WHERE num = 0。
  2. 使用exists 替代in。
  3. 使用WHERE子句替代HAVING子句,因为HAVDING是检索出所有结果之后才对结果进行过滤。

6.2. 索引优化

  1. 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构。
  2. 在经常用在连接的列上创建索引,这些列一般是外键,可以加快连接的速度。
  3. 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。
  4. 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。
  5. 在经常使用WHERE子句的列上面创建索引,加快条件的判断速度。

6.3. 数据库结构优化

  1. 范式,反范式优化。
  2. 拆分表

6.4. 服务器硬件优化

7. 存储过程和触发器的区别

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次变异后再次调用不需要再次编译,用户可以通过指定存储过程的名字来执行它。

触发器也是SQL语句集,不同于存储过程,触发器主要通过事件进行触发而被执行的。

8. 悲观锁和乐观锁

  • 乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新数据的时候,会判断一下此期间别人是否更新了这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型。
  • 悲观锁:总是假设最坏的情况,每次去拿数据都认为别人会修改,所以每次在拿数据的时候都会上锁。

9. MySQL常用的存储引擎

  • MyISAM:是基于ISAM的存储引擎,具有较高的插入、查询速度,但是不支持事务。
  • InnoDB: 是事务型数据库的首选引擎,支持事务安全表,支持锁和外键。写效率差一些,会占用更多磁盘空间
  • MEMORY:所有数据存储在内存中,数据的处理速度快,但是安全性不高。
全部评论

相关推荐

03-13 00:04
已编辑
吉林大学 Java
约面的挺突然。。狠下心接了1.自我介绍2.讲讲JAVA的反射3.可以继续讲讲AOP,动态代理[&nbsp;因为讲反射不小心吟唱到了例如AOP的动态代理,但是这块记忆的非常不熟,结果磕磕绊绊&nbsp;]4.项目我看你写了AOP和注解,具体怎么实现滑动窗口限流的[&nbsp;梦到什么说什么,吟唱八股发散千万不要散到自己不熟悉的区域&nbsp;]5.也讲讲为什么另一个项目选择令牌桶,具体流程6.&nbsp;OK,讲讲&nbsp;Redis&nbsp;的数据类型?还有吗?就了解这五种嘛[&nbsp;把5个的基础类型从应用对比到历届底层全都吟唱了一遍。一句还有吗直接没力气了,简历就写了理解5种,别的我是真一点没看TT&nbsp;]7.讲讲Redission分布式锁实现8.这个指数退避怎么实现的9.在这里有考虑去保障幂等性嘛10.这里为什么使用指数退避呢?&nbsp;什么时候用均匀重传[已经晕过去了说不了解,刚说了后就意识到,估计应该说指数退避能缓解压力防止下游服务器雪崩之类的]11.ok,那讲讲JMM12.讲讲RocketMQ如何保证的不丢消息13.讲讲RocketMQ延迟消息原理14.讲讲项目Redis实现会话记忆这一块15.如果ai调用function&nbsp;calling出现幻觉,有考虑怎么解决吗?[&nbsp;不了解,面试官说什么接口幂等化,高危操作人工防护,没在听,感觉人已经飞升了TT&nbsp;]16.mcp了解嘛?和function&nbsp;calling有什么区别[&nbsp;依旧不了解,只能说了个前者规范架构抽象解耦,后者耦合高只能算个工具调用]17.AI生成代码的代码质量怎么保障,那平时如何review的呢18.算法。lc215&nbsp;&nbsp;数组中最大第k个元素19.打算考研还是本科就业20.反问1️⃣有哪里不足,有哪些需要提高的部分。[主要说知识广度不够,多刷算法,让我别太紧张]2️⃣部门业务会做什么人生第二次面试。感觉大厂面试官的气场压力很大应该凉了不过这次面试非常锻炼心态,多面试,多面试。
Luxlord:面经太硬核了
点赞 评论 收藏
分享
评论
3
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务