数据库面试题
这几天在看数据库的相关知识,准备面试,在网上查了查,找到一个特别好的总结,链接如下:https://zhuanlan.zhihu.com/p/23713529
以下内容是为了方便我记忆,建议可以直接去链接里看
什么是存储过程?优缺点?
存储过程是一些预编译的SQL语句,也就是说将它看作一个记录集,由一些SQL语句组成的代码块,这些SQL语句像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候进行调用就可以了
- 存储过程是一个预编译的代码块,执行效率较高
- 一个存储过程替代大量的SQL语句,可以降低网络的通信量,提高通信速率
- 可以一定程度上确保数据安全
索引是什么?有什么作用?优缺点?
索引是对数据库表中一个或者多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构。
MySQL中索引的基本类型:普通索引、唯一索引、主键索引、全文索引
- 索引加快了数据库的检索速度
- 降低了插入、排序、修改等维护任务的速度
- 唯一索引可以确保每一行数据的唯一性
- 使用索引,可以在查询过程中优化隐藏器,提高系统性能
- 索引占用物理和数据空间
什么是事务
事务是并发控制的基本单位。所谓的事务,是一个操作序列,这些操作要么都执行要么都不执行,他是一个不可分割的单位。事务是数据库维护数据一致性的单位,在每一个事务结束时,都能保持数据一致性
乐观锁、悲观锁
https://blog.csdn.net/evan_qhy/article/details/104939162
使用索引一定能提高查询的性能吗?
通常,通过索引查询数据比全表扫描要快,但它有代价:
索引需要额外的空间来存储,也需要定期维护,每当有记录的在表中增减或索引被修改时,索引本身也会被修改。所以索引需要额外的存储空间和处理,一些不必要的索引反而会使查询反应时间变慢。
drop、delete、truncate 的区别
- delete和truncate只删除表中的数据,不能删除表的结构
- 一般来说,删除的速度:drop > truncate > delete
- delete语句是DML,该操作会放到rollback segment中,事务提交后才会生效;truncate和drop是DDL,操作立即生效,原数据不放到rollback segment中,不能回滚
- 删除整个表包括表结构时用drop;删除部分数据时用delete;删除所有数据保留表结构时用truncate
超键、候选键、主键、外键分别是什么?
- 超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键
- 候选键:是最小的超键,没有冗余元素的超键
- 主键:数据库表中对存储数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键不能为空值
- 外键:在一个表中存在的另一个表的主键称此表的外键
什么是试图?适用场景?
视图是一种虚拟的表,具有和物理表相同的功能,可以对视图进行增删改查的操作。视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表,使得我们获取数据更容易。
- 只暴露部分字段给访问者,所以建一个虚表,就是视图
- 查询的数据来源于不同的表,可以建一个视图,把多个表查询的结果联合起来,查询者只需从视图中获取数据
三个范式
- 第一范式:数据库表中的字段都是单一属性,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等
- 第二范式:数据库表中不存在非关键字段对任意候选键的部分函数依赖(部分函数依赖指:存在组合关键字中某些字段决定非关键字段的情况)
- 第三范式:在第二范式的基础上,数据库表中不存在非关键字段对任一候选关键字段的传递函数依赖
具体讲解:https://www.cnblogs.com/wsg25/p/9615100.html