计算机保研/考研面试题——数据库基础篇

       笔者在2023年参加了部分985和华五计算机夏令营和预推免面试,下面是笔者对于数据库基础知识点一些总结,对于保研和考研均适用,对找工作的同学也有一定参考作用,欢迎大家关注点赞、收藏、评论,如需要其他学科的问题请关注我~(部分其他学科的知识点总结已在主页公布


 相关文章:

计算机保研/考研面试题——数学篇-CSDN博客

计算机保研/考研面试题——数据结构与算法篇-CSDN博客

计算机保研/考研面试题——操作系统篇-CSDN博客

计算机保研/考研面试题——计算机网络篇-CSDN博客

计算机保研/考研面试题——编程语言篇(C和C++)-CSDN博客

计算机保研/考研面试题——计算机组成原理篇-CSDN博客


1. 数据库系统DBS和数据库管理系统DBMS的区别是什么?★★

       数据库系统是指由数据库、数据库管理系统和应用程序组成的数据管理系统。它是为了有效地组织、存储、管理和检索大量数据而设计的软件系统。

       数据库管理系统是一种软件系统,用于管理数据库中的数据。它提供了一组操作数据库的工具和接口,允许用户定义、创建、修改和查询数据库中的数据。(常见的关系型DBMS:MySQL、Oracle、SQL Server,非关系型DBMS:Redis)

2. 数据库系统的三级模式结构是什么?★★

       (1)外模式

       也称子模式或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。一个数据库可以有多个外模式。数据库管理系统提供外模式数据定义语言(外模式 DDL)来严格定义外模式。

       (2)模式

       也称逻辑模式,是数据库的全局逻辑结构和组织方式的描述。模式定义了数据库中所有数据的完整视图,包括实体、关系、属性以及它们之间的联系。模式层面上描述了数据库的总体逻辑结构,是所有用户和应用程序共享的数据库抽象模型。一个数据库只有一种模式。

       (3)内部模式

       也称为存储模式或物理模式,是数据库在物理存储介质上的实际存储方式和组织结构的描述。内部模式定义了数据在磁盘或其他存储介质上的存储格式、索引方式、数据分布方式等信息。内部模式侧重于数据库的物理实现细节,供数据库管理系统使用。

3.简述数据库系统的特点。★★

       (1)数据结构化;

       (2)数据的共享性高,冗余度低,易扩充;

       (3)数据独立性高;

       (4)数据由DBM统一管理和控制。

4. 数据库管理系统的主要功能有哪些?★★

       (1)数据的安全性保护

       (2)数据的完整性保护

       (3)并发控制

       (4)数据库恢复

5. 什么叫数据与程序的物理独立性?什么叫数据与程序的逻辑独立性?为什么数据库系统具有数据与程序的独立性?★★★

       物理独立性:是指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。

       逻辑独立性:是指用户的应用程序与数据的逻辑结构是相互独立的,也就是说,数据的逻辑结构改变了,用户程序也可以不变。

       为什么:数据独立性是由DBMS的二级映像功能来保证的(外模式/模式映像,模式/内模式映像),这两层映像机制保证了数据库系统中数据的逻辑独立性和物理独立性。

6. 笛卡尔积和自然连接的区别。★★★

       笛卡尔积

       笛卡尔积是一个基本的集合操作,它将两个或多个表中的所有行组合在一起,生成一个包含所有可能组合的结果集。在笛卡尔积中,每个表的每一行都与其他表的每一行进行组合,并生成新的行。结果集的行数等于每个表的行数乘积。

       自然连接

       自然连接是基于两个或多个表中相同列名的列进行连接操作。它将这些相同列名的列作为连接条件,自动找到两个表中相应列值相等的行,并将它们组合在一起形成结果集。自然连接省略了连接条件的指定,只要对应列名相同,就会自动匹配。自然连接可以更方便地进行表之间的关联操作,无需显式指定连接条件,但需要特别注意列名的一致性。

7. 什么是视图?视图有什么优点?视图什么时候是不可更新的?★★★

       视图

       是从一个或多个基本表(也可能包括其他视图)中检索出的虚拟表,它本身不存储数据。视图可以看作是基于基本表的查询结果集的临时表。通过定义视图,我们可以以更方便、更简洁的方式获取特定的数据子集,而无需每次都编写复杂的查询语句。视图可以进行查询操作,但不能直接进行数据修改。视图的定义存储在数据库中。

       优点:

       (1)视图能够简化用户的操作

       (2)视图使用户能以多种角度看待同一数据

       (3)视图对重构数据库提供了一定程度的逻辑独立性

       (4)视图能够对机密数据提供安全保护

       (5)适当的利用视图可以更清晰的表达查询

       不可更新的视图:

       (1)若视图是由两个以上基表导出的,此视图不允许更新

       (2)若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATES作,但允许DELETE操作

       (3)若视图的字段来自聚集函数,则此视图不允许更新

       (4)若视图定义中含有GROUP BY子句,则此视图不允许更新

       (5)若视图定义中含有DISTINCT短语,则此视图不允许更新

       (6)若视图定义中有嵌套查询,并且内层查询的 FROM子句中涉及的表也是导出该视图的基本表,则此视图不允许更新

       (7)一个不允许更新的视图上定义的视图也不允许更新

8. 关系数据库的完整性规则有哪几类?★★★

       (1)实体完整性

       实体完整性要求每个表中的主键必须具有唯一性和非空性。也就是说,表中的每个实体必须能够被唯一地标识,并且主键列不能包含空值。

       (2)参照完整

       参照完整性是指在两个表之间建立外键关系时,要求引用表中的外键必须与被引用表中的主键值相匹配。也就是说,如果一个表中的外键引用了另一个表中的某个主键值,那么被引用的主键值必须存在于被引用表中。

       (3)用户定义的完整性

       用户定义的完整性规则是根据具体业务需求而定义的规则。这些规则可通过触发器、自定义约束或存储过程等方式实现。例如,限制某个字段的取值范围、检查复杂的业务逻辑规则等。

9. 什么是触发器?触发器什么时候会触发?触发器的作用是什么?★★★★

       (1)触发器:

       触发器是与表有关的数据库对象,在满足预定义的条件时会被触发,从而执行触发器中定义的语句集合。

       (2)触发条件

       在数据库进行数据变更的时候,触发器可以被触发。即对数据表进行插入、删除、修改数据的时候,可以执行触发器。触发器定义在表上,也依附于表存在。触发器可以在数据表变更进行前执行,也可能在变更进行后执行。触发器对于每一行都会被执行。

       (3)触发器作用:

       强制数据完整性:触发器可以用于强制实施数据完整性规则。例如,当插入或修改表中的数据时,触发器可以检查数据的有效性并拒绝不符合规定的操作。

       数据验证和转换:触发器可以对即将插入、更新或删除的数据进行验证和转换。例如,在插入数据之前,触发器可以验证是否满足某些条件,或者在插入数据之后,触发器可以对数据进行后处理操作。

       日志记录和审计:触发器可以用于记录数据操作的日志或进行审计跟踪。例如,在数据更新之后,触发器可以将旧值和新值记录到审计表中,以便后续分析和审计目的。

       自动化业务逻辑:触发器可以用于执行复杂的业务逻辑。例如,在某个表上进行插入操作时,触发器可以自动在其他相关表上进行相应的更新操作,以保持数据的一致性。

10. 简述一下第一范式、第二范式、第三范式、BC范式、第四范式★★★★★

       范式是数据库设计中用于消除数据冗余和提高数据存储效率的一种规范化方法。

       (1)第一范式(1NF)

       属性是不可分割的最小单元,即不会有重复的列,体现原子性。

       (2)第二范式(2NF)

满足 1NF 前提下,存在一个候选码,非主属性全部依赖该候选码,即存在主键,体现唯一性。总之,就是消除部分函数依赖。(ps:完全函数依赖指的是缺一不可,部分函数依赖可以去掉左边的某个属性仍然可以推出右边的属性)

       (3)第三范式(3NF)

       满足 2NF 前提下,非主属性必须互不依赖,消除传递依赖

       (4)BC范式

       在满足第三范式的基础上,确保表中的每个非主属性都完全依赖于每个候选码。总之,就是每一个决定属性因素都包含码

       (5)第四范式(4NF)

       在满足BC范式的基础上,通过进一步拆分表来处理多值依赖问题。多值依赖指的是当一个非主键字段的值依赖于其他非主键字段的多个值时,应将其拆分成独立的表。

        附:三大范式(第一范式、第二范式、第三范式)的理解

【1】不符合第一范式:

电话还可以继续拆分,不满足原子性。

拆分后:

【2】不符合第二范式:

只有部门名称和姓名构成了主键,但是仅仅部门名称决定了部门地址,不满足第二范式。

修改后:

进一步优化:

【3】不符合第三范式:

工号是主键,然而这里面最低月薪和最高月薪被职位决定,而职位被工号决定,有传递依赖,不满足第三范式。

修改后:把职位的信息放在职位表中

11. 什么是事务?事务的ACID特性是什么?如何保证ACID特性?★★★★★★

       事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。

       事务的ACID性质

    (1)原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败回滚,不会处于中间状态。

    (2)一致性(Consistency):事务必须使数据库从一个一致性状态(合法的状态)转移到另一个一致性状态(合法的状态)。

       破坏一致性的例子:

       举例1:A账户有200元,转账300元出去,此时A账户余额为-100元(不合法)。你自然就发现此时数据是不一致的,为什么呢?因为你定义了一个状态,余额这列必须>=0。

       举例2:A账户有200元,转账50元给B账户,A账户的钱扣了,但是B账户因为各种意外,余额并没有增加(不合法)。你也知道此时的数据是不一致的,为什么呢?因为你定义了一个状态,要求A+B的总余额必须不变。

       举例3:在数据表中我们将`姓名`字段设置为`唯一性约束`,这时当事务进行提交或者事务发生回滚的时候,如果数据表的姓名不唯一,就破坏了事务的一致性要求。

    (3)隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的。

    (4)持久性(Durability):一个事务一旦提交,它对数据库中数据的改变就是永久性的。

       如何保证ACID性质

       (1)通过实现事务管理器来处理事务的执行、提交和回滚,以保证原子性和一致性。

       (2)使用锁机制和并发控制算法来控制事务之间的相互干扰,以确保隔离性。

       (3)将事务操作记录在事务日志中,并使用恢复和重做机制来保证持久性。

       (4)设计合理的数据库模式和应用程序逻辑来确保一致性。

12. 什么是封锁?基本的封锁类型有几种?★★★

       在数据库中,锁是用于控制对数据库对象(如表、行、页等)进行并发访问的机制。通过使用锁,可以确保数据库操作的正确性和一致性。

       类型:

       共享锁:也称为读锁,多个事务可以同时持有共享锁,并且可以并发地读取被锁定对象的数据,但不能修改或写入数据。共享锁之间不互斥,不会阻塞其他共享锁的获取。

       排他锁:也称为写锁,只能由一个事务持有,它阻塞其他事务对被锁定对象进行读取或修改操作。排他锁可以保证事务对被锁定对象的独占性访问,以便进行数据的修改。

13. 在数据库中为什么要并发控制?并发控制技术可以保证事务的哪些特征?★★★

       数据库是共享资源,通常有许多个事务同时在运行。当多个事务并发地存取数据库时就会产生同时读取或修改同一数据的情况。 若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。

       并发控制技术能够保证事务的ACID特性。

14. 简述并发操作带来的三类数据不一致性。★★★★

       (1)丢失修改

       当多个事务同时对同一个数据项进行修改时,由于并发执行的无序性,可能导致某些事务的更新被覆盖或丢失。例如,事务A和事务B同时读取数据X,然后分别进行修改,并提交更新。如果事务B的修改操作覆盖了事务A的修改结果,那么事务A的更新就会丢失。

       (2)不可重复读

       当一个事务在相同的查询中多次读取同一行数据,但在此期间,其他事务对该行进行了修改或删除,导致每次读取的结果不一致。例如,事务A读取数据X的值,然后事务B修改了数据X并提交,接着事务A再次读取数据X,得到的结果与之前不一样。

       (3)读脏数据

       当一个事务读取到另一个未提交事务的数据时,称为读脏数据。例如,事务A修改了数据X,但还没有提交,此时事务B读取了数据X,得到的是事务A未提交的修改结果。如果事务A最终回滚(即不提交),那么事务B读取到的数据就是无效的,造成了数据不一致的情况。

15. 简述两段封锁协议的内容。★★★

       指所有事务必须分两个阶段对数据项加锁和解锁。

       (1)在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁

       (2)在释放一个封锁之后,事务不再申请和获得任何其他封锁

16. 什么叫做数据库的恢复?数据库恢复的基本技术有哪些? ★★

       数据库恢复是指通过技术手段,将保存在数据库中上丢失的电子数据进行抢救和恢复的技术。

       技术:

       (1)数据转储

       转储是指DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程,备用的数据称为后备副本或后援副本

       (2)登录日志文件

17. 简述数据库系统中可能发生的故障类型,以及数据恢复方法。★★★

       (1)事务内部的故障

       指的是单个事务执行过程中发生的错误或异常。例如,事务逻辑错误、约束冲突、死锁等。

       恢复方法:由恢复子系统应利用日志文件撤消(UNDO)此事务已对数据库进行的修改。

       (2)系统故障

       称为软故障,是指造成系统停止运转的任何事件,使得系统要重新启动。

       ①发生系统故障时,事务未提交

       恢复方法:强行撤消(UNDO)所有未完成事务

       ②发生系统故障时,事务已提交,但缓冲区中的信息尚未完全写回到磁盘上。

       恢复方法:重做(REDO)所有已提交的事务

       (3)介质故障

       称为硬故障,指的是存储介质(如硬盘)出现故障导致数据丢失或损坏。

       恢复方法:装入数据库发生介质故障前某个时刻的数据副本;重做自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库

       (4)计算机病毒

       指的是恶意软件对数据库系统的破坏。

       恢复方法:包括使用杀毒软件清除病毒,并通过备份恢复受感染的数据。

18. 什么是索引?请简述索引的几种类型或分类。★★★★

       索引

       索引是对数据库表中一列或多列的值进行排序的数据结构,用于快速访问数据库表中的特定信息。

       分类

       (1)从物理结构上可以分为聚簇索引(或叫做聚集索引)和非聚簇索引(或二级索引)两类

       (2)从应用上可以划分为一下几类:

       普通索引:MySQL 中的基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了提高查询效率。

       唯一索引:索引列中的值必须是唯一的,但是允许为空值。

       主键索引:特殊的唯一索引,也成聚簇索引,不允许有空值,并由数据库帮我们自动创建。

       组合索引:组合表中多个字段创建的索引,遵守最左前缀匹配规则。

       全文索引:用于支持全文搜索的一种技术。它允许对文本内容进行快速、高效的搜索,并返回与搜索条件匹配的结果。

19. 索引常用的两种数据结构是什么?有什么区别?★★★★

       MySQL中常用的是Hash(MyISAM存储引擎支持Hash索引)和B+树索引(InnoDB存储引擎支持B+树索引)。

       区别:

       (1)实现方式

       Hash索引底层就是Hash表,进行查询时调用 Hash 函数获取到相应的键值(对应地址),然后回表查询获得实际数据。

       B+树索引底层实现原理是多路平衡查找树,对于每一次的查询都是从根节点出发,查询到叶子节点方可以获得所查键值,最后查询判断是否需要回表查询。

       (3)使用场景

       Hash索引适合于等值查询,即根据索引列的具体值进行查询。对于范围查询或排序操作,Hash索引的效果不好。

       B+树索引适用于范围查询、排序和模糊匹配等操作。B+树索引的有序性使得范围查询更加高效,而且能够支持一些特殊的查询需求,如前缀匹配等。

       (4)性能特点

       Hash索引的读取性能通常比B+树索引高,因为通过散列值可以直接定位到存储索引项的位置。但如果存在哈希冲突,可能需要进行链式查找,会影响性能。

       B+树索引的读取性能在范围查询和排序操作上通常更好。B+树索引具有较高的数据聚集性,利于顺序访问,且支持部分加载等优化策略。

       Hash索引对于插入和更新操作性能较好,因为哈希表的插入和查找操作复杂度为O(1)。而B+树索引由于需要维护有序性,插入和更新操作相对较慢。

20. 为什么B+树比B树更适合应用于数据库索引?★★★★

       (1)B+树减少了 IO 次数

       由于索引文件很大因此索引文件存储在磁盘上,B+树的非叶子结点只存关键字不存数据,因而单个页可以存储更多的关键字,即一次性读入内存的需要查找的关键字也就越多,磁盘的随机I/O读取次数相对就减少了。

       (2)B+树查询效率更稳定

       由于数据只存在在叶子结点上,所以查找效率固定为O(log n),所以B+树的查询效率相比B树更加稳定。

       (3)B+树更加适合范围查找

       B+树叶子结点之间用链表有序连接,所以扫描全部数据只需扫描一遍叶子结点,利于扫库和范围查询;B 树由于非叶子结点也存数据,所以只能通过中序遍历按序来扫。也就是说,对于范围查询和有序遍历而言,B+树的效率更高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值