todo【面经】牛客网数据库相关面经题

1. mybatisplus和mysql的区别

【todo头一个是啥。。】

2. Innodb索引,说原理,如何创建索引

【todo放link】见其他文章

3. ACID特性

【todo放link】见其他文章

4. sql注入原理,防止sql注入

【todo】

5. 删除表中所有的数据保留表结构

使用truncate操作【todo其他删除操作 drop、truncate、 delete】

6. mysql联合索引能否命中

【todo】

7. 索引是什么,索引底层

  • 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
    在MySQL中,存储引擎现在索引中查找对应的值,然后根据匹配的索引记录找到对应的数据行,最后将数据结果集返回给客户端。
  • 优点:
  1. 在查询过程中提高系统的性能
  2. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
  3. 在使用分组和排序子句进行数据检索时,可以减少查询中分组和排序的时间。
  • 缺点:
  1. 创建所有和维护索引要耗费时间,而且随着数据量的增大而增大。
  2. 索引需要占用物理空间,如果要建立聚类索引,所需要的空间会更大。
  3. 在对表中的数据进行增删改时需要耗费较多的时间,因为索引也要动态地维护。
  • 分类:
  1. 单例索引(主键索引、唯一索引、普通索引):
    一个索引只包含一个列,一个表可以有多个单例索引。
  2. 组合索引:
    一个组合索引包含两个或两个以上的列。

2.1 单例索引

普通索引

最常见的索引,没有任何限制

唯一索引

与普通索引类似,但是要求所有的列的值都是唯一的,允许有空值

主键索引

要求所有的列的值是唯一的,且不允许有空值

2.2 组合索引

如果建立了组合索引,那么它实际建立了多层单例索引。
在使用查询的时候,遵循最左匹配原则。

  • 如果不按索引最左列开始查询则不能使用组合索引。
  • 如果查询的某个列有范围查询,则其右边的所有列都无法使用该组合索引。
  • 不能跳过某个字段进行查询,这样利用不到组合索引。

【todo, b+树】

8. 事务是什么,事务的特性,具体的事务例子

【todo】

9. mysql死锁

【todo】

10. 慢查询

【todo】

11. mysql连接

【todo】

12. 数据库中的存储过程

【todo】

13. 分布式事务

【todo】

14. 为什么线上常用可重复度隔离级别

【todo】

15. 聚类索引

【todo】

16. 主键和外键

  1. 主键用来唯一标识一条记录,不能有重复,不允许为空,而外键可以重复,可以为空。
  2. 如果公共关系字在一个关系中是主键,那么这个公共关键字被称为另一个关系的外键。
  3. 主键用来保证实例完整性,外键用来建立与其他表的联系,需要保证参照完整性。
  4. 主键在一个关系里只能有一个,外键可以有多个。

17. 查询语句中:先分组还是先排序,为什么?

【todo】

18. order by 和group by 是什么,区别是什么,

order by 和group by 同时使用的时候是什么顺序,为什么。
【todo】

19. 范式

  • 符合高一级范式的设计必定符合低一级范式。
  • 规范化:一个低一级的关系模式通过模式分解可以转化为若干个高一级范式的关系模式的集合,这个过程叫做规范化。
  • 候选键:若关系中的某一属性组的值能唯一标识一个元组,而其子集不能,则称该属性组为候选键。若一个关系中有多个候选键,则选定其中一个为主键。
  1. 第一范式1NF:
    属于第一范式关系的所有属性都不可再分,即数据项不可分。
  2. 第二范式2NF:
    若某关系R属于第一范式,且每一个非主属性完全依赖于任何一个候选键,则关系R属于第二范式
  3. 第三范式3NF
    在第二范式基础上,任何非主属性不依赖于其他非主属性。
  4. 巴斯-科德范式BCNF
    在第三范式基础上,任何非主属性不能对主键子集依赖。

20. 左连接、右连接和内连接的区别

【todo】

21. mysql的范围查找

【todo】

22. innodb和myisam

  1. InnoDB支持事务,MyISAM不支持。
  2. InnoDB支持外键,而MyISAM不支持。
  3. InnoDB是聚类索引,使用B+树作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+树组织的一个索引结构),必须有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。
    MyISAM是非聚类索引,也是使用B+树作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
  4. InnoDB不保存表的具体行数,执行count(*)时需要进行全表扫描,而MyISAM用一个变量保存了整个表的行数
    因为InnoDB的事务特性,在同一时刻表中的行数对于不同的事务而言是不一样的,因此count(*)统计会计算对于当前事务而言可以统计到的行数。
  5. InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁。
    InnoDB的行级锁是实现在索引上的,而不是锁在物理行记录上。
  6. InnoDB表必须有唯一索引(如主键),用户没有指定的话,会找/生成一个隐藏列Row_id来充当默认主键,而MyISAM可以没有。

23. 数据库优化

【todo,后悔不好好学习】

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容