数据库系统教程-面试汇总-合集

参考 《数据库系统教程》(第三版)施伯乐

考前临时抱佛脚整理的,边整理边背边想哭,数据库前后没什么逻辑,背就完事了,加油吧最后几天

目录

1.事务

1.1事务是什么?

事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,由一条或者多条sql语句组成,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

1.2事务的ACID特性是什么?

事务应该具有4个属性:原子性、一致性、隔离性、持久性。

原子性(Atomicity):指整个数据库事务是不可分割的工作单位。只有事务中所有的数据库操作都执行成功,整个事务的执行才算成功。事务中任何一个sql语句执行失败,那么已经执行成功的sql语句也必须撤销,数据库状态应该退回到执行事务前的状态。

一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束,也就是说在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏

隔离性(Isolation):隔离性也叫做并发控制、可串行化或者锁。事务的隔离性要求每个读写事务的对象与其它事务的操作对象能相互分离,即该事务提交前对其它事务都不可见,这通常使用锁来实现多个事务并发执行时,一个事务的执行不应影响其他事务的执行。

持久性(Durability):表示事务一旦提交了,其结果就是永久性的,也就是数据就已经写入到数据库了,如果发生了宕机等事故,数据库也能将数据恢复。

1.3事务的隔离级别

在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。

InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。这些隔离级别之间的区别如下:
事务的隔离级别

在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。

InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。这些隔离级别之间的区别如下:
数据库系统教程-面试汇总-合集

每个级别会引发什么问题

  1. 未提交读(READ UNCOMMITTED)
    事务中的修改,即使没有提交,对其它事务也是可见的。这样会提高性能,但是会导致脏读问题。

  2. 提交读(READ COMMITTED)一个事务只能读取已经提交的事务所做的修改。换句话说,一个事务所做的修改在提交之前对其它事务是不可见的。该级别可以解决脏读为问题,但不能避免不可重复读。

  3. 可重复读(REPEATABLE READ)保证在同一个事务中多次读取同样数据的结果是一样的。可以解决不可重复读的问题,但还是不能避免幻读的问题。

  4. 可串行化(SERIALIZABLE)强制事务串行执行。可以解决所有问题。最高级别的隔离,MySQL默认的隔离级别是可重复读

2.内联接,外联接区别?

内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。

外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行。分左连接、右连接、全连接三种。

1)内连接:只连接匹配的行

2)外连接:包含左边表的全部行以及右边表中全部匹配的行

3)外连接:包含右边表的全部行以及左边表中全部匹配的行

4)全外连接:包含左、右两个表的全部行,不管在另一边的表中是否存在与它们匹配的行

5)(theta)连接:使用等值以外的条件来匹配左、右两个表中的行 select A.c1,B.c2 from A join B on A.c3 != B.c3;

6)交叉连接:生成笛卡尔积——它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行一一匹配 select A.c1,B.c2 from A,B;

3.索引

3.1索引的作用?和它的优点缺点是什么?

索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。

它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。

索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

3.2使用索引查询一定能提高查询的性能吗?为什么?

通常,通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价. 索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改.

这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O.

因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.使用索引查询不一定能提高查询性能。

索引范围查询(INDEX RANGE SCAN)适用于两种情况:

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

2.基于非唯一性索引的检索 索引就是为了提高查询性能而存在的,如果在查询中索引没有提高性能,只能说是用错了索引,或者讲是场合不同

3.3MySQL为什么使用B+树,而不是使用其他?B+树的特点

索引是帮助MySQL高效获取数据的数据结构。索引:排好序的快速查找数据结构!索引会影响where后面的查找,和order by 后面的排序。

B+Tree索引(平衡多路查找树)
是B-Tree的改进版本,同时也是数据库索引索引所采用的存储结构。数据都在叶子节点上,并且增加了顺序访问指针,每个叶子节点都指向相邻的叶子节点的地址。

B-Tree需要获取所有节点,相比之下B+Tree效率更高。B+树索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问;
数据库系统教程-面试汇总-合集
hash:虽然可以快速定位,但是没有顺序,IO复杂度高。
二叉树:树的高度不均匀,不能自平衡,查找效率跟数据有关(树的高度),并且IO代价高。
红黑树:树的高度随着数据量增加而增加,IO代价高。

为什么说B±tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?
B+tree的磁盘读写代价更低,B+tree的查询效率更加稳定
数据库索引采用B+树而不是B树的主要原因:B+树只要遍历叶子节点就可以实现整棵树的遍历,而且在数据库中基于范围的查询是非常频繁的,而B树只能中序遍历所有节点,效率太低。
B+树的特点:
(1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;
(2)不可能在非叶子结点命中;
(3)非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;

4.数据库三范式

范式理论是为了解决以上提到四种异常。

高级别范式的依赖于低级别的范式,1NF 是最低级别的范式。

  1. 第一范式 (1NF):属性不可分;

  2. 第二范式 (2NF):每个非主属性完全函数依赖于键码。可以通过分解来满足。

  3. 第三范式 (3NF):非主属性不传递函数依赖于键码。

没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。

具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。

5.视图

什么叫视图?游标是什么?

视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。
对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。

一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。

5.1.试述视图的优点

( l )视图能够简化用户的操作;
( 2 )视图使用户能以多种角度看待同一数据;
( 3 )视图对重构数据库提供了一定程度的逻辑独立性;
( 4 )视图能够对机密数据提供安全保护

5.2.哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明

基本表的行列子集视图一般是可更新的。

若视图的属性来自集合函数、表达式,则该视图肯定是不可以更新的。

所有的视图是否都可以更新?为什么?

不是。
视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。

因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的.

6.如何优化数据库,如何提高数据库的性能?

1)给数据库做索引,合理的索引能立即显著地提高数据库整个系统的性能。

2)在适当的情况下,尽可能的用存储过程而不是SQL查询。因为前者已经过了预编译,运行速度更快。

3)优化查询语句,通过高性能的查询语句提高数据库的性能。

7.完整性约束表现在三个方面

1.域的完整性:用Check来实现约束,在数据库设计工具中,对字段的取值范围进行定义时,有一个Check按钮,通过它定义字段的值城。

2.参照完整性:用PK、FK、表级触发器来实现。

3.用户定义完整性:它是一些业务规则,用存储过程触发器来实现。

8.什么是存储过程?用什么来调用?

存储过程是一个预编译的SQL语句, 简单的说存储过程是为了完成某个数据库中的特定功能而编写的语句集,该语句集包括SQL语句(对数据的增删改查)、条件语句和循环语句等。

优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程(CALL)。

9.触发器的作用?

触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。

可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

10.超键 候选键 主键 外键

超键:在关系中能唯一标识元组(数据库中的一条记录)的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。

候选键:是最小超键,即没有冗余元素的超键。

主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合,用户选作元组标识的一个侯选键称为主键。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。

外键:在一个表中存在的另一个表的主键称此表的外键,外键主要是用来描述两个表的关系。

10.E-R图

10.1 E-R图是什么?

E-R图
也称实体-联系图(Entity Relationship Diagram)

提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

它是描述现实世界概念结构模型的有效方法,是表示概念模型的一种方式。

10.2 E-R图每个形状的意义?

矩形表示实体型,矩形框内写明实体名;

椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来;

菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1,1:n或m:n)。

11.锁

11.1.锁的分类

一般可以分为两类,一个是悲观锁,一个是乐观锁

悲观锁一般就是我们通常说的数据库锁机制,乐观锁一般是指用户自己实现的一种锁机制。

悲观锁:它对于数据被外界修改持保守态度,认为数据随时会修改,所以整个数据处理中需要将数据加锁。悲观锁一般都是依靠关系数据库提供的锁机制,事实上关系数据库中的行锁,表锁不论是读写锁都是悲观锁。

悲观锁按照使用性质划分:
共享锁(Share locks简记为S锁):也称读锁,事务A对对象T加s锁,其他事务也只能对T加S,多个事务可以同时读,但不能有写操作,直到A释放S锁。
排它锁(Exclusivelocks简记为X锁):也称写锁,事务A对对象T加X锁以后,其他事务不能对T加任何锁,只有事务A可以读写对象T直到A释放X锁。

11.2.三级封锁协议

(1)一级封锁协议
事务T要修改数据A时必须加X锁,直到T结束才释放锁。
可以解决丢失修改问题,因为不能同时有两个事务对用一个数据进行修改,那么事务的修改就不会被覆盖。

(2)二级封锁协议
在一级的基础上,要求读取数据A时必须加S锁,读取完马上释放S锁。
可以解决读脏数据问题,因为如果一个事务在对数据A进行修改,根据一级封锁协议,会加X锁,那么就不能再加S锁了,也就不会读入数据。

3)三级封锁协议
在二级的基础上,要求读取数据A时必须加S锁,直到事务结束了才能释放S锁。
可以解决不可重复读的问题,因为读取A时,其它事务不能对A加X锁,从而避免了在读的期间数据发生变化。

11.3.封锁粒度是什么?

封锁对象的大小称为封锁的粒度。

封锁粒度和系统并发性/系统开销密切相关,成反比。

封锁的粒度越大 数据库能够封锁的数据单元就越少,并发度就越小,系统开销也就越小
封锁的粒度越小 数据库能够封锁的数据单元就越多,并发度就越高,系统开销也就越大

11.4.封锁带来的问题

活锁
是指线程1可以使用资源,但它很礼貌,让其他线程先使用资源,线程2也可以使用资源,但它很绅士,也让其他线程先使用资源。这样你让我,我让你,最后两个线程都无法使用资源。
饥饿
是指如果线程T1占用了资源R,线程T2又请求封锁R,于是T2等待。T3也请求资源R,当T1释放了R上的封锁后,系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后,系统又批准了T4的请求…,T2可能永远等待
死锁
是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

12.数据库管理系统的主要功能?

数据定义功能:提供数据定义语言(DDL);定义数据库中的数据对象;
==数据字典 ==:分类组织、存储和管理各种数据;确定数据在存储级别上的结构和存储方式;实现数据之间的练习;提供多种存取方法提高存取效率;
数据操纵功能:提供数据操纵语言(DML);实现对数据库的基本操作(查询、插入、删除和修改);
数据库的保护管理:数据的安全性、完整性、多种对用户数据的并发使用;发生故障后的系统恢复数据库;
数据库维护功能:提供实用程序工具,完成数据库数据批量装载,数据库转储,介质故障恢复,数据库的重组织和性能监视等。

13.什么是数据库?什么是数据库管理系统? 说明两者的区别和联系。

数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合
数据库管理系统是位于用户应用与操作系统之间的一层数据管理软件;是基础软件,是一个大型复杂的软件系统。
区别:数据库指的是一些数据的集合。数据库管理系统是位于操作系统和数据库应用系统之间的数据库管理软件。
联系:数据库管理系统的存在使得数据库内的数据便于使用与维护。

14.数据库的二级映像功能与数据独立性

14.1 数据库管理系统内部提供二级映像?

外模式/模式映像;
模式/内模式映像;
外模式/模式映像

14.2保证数据的逻辑独立性?

1 当模式改变时,数据库管理员对外模式/模式映像作相应改变,使外模式保持不变;
2 应用程序是依据数据的外模式编写的,应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
模式/内模式映像

14.3保证数据的物理独立性?

当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映像,使模式保持不变。
模式不变,则应用程序不变。保证了数据与程序的物理独立性,简称数据的物理独立性。

14.4 数据库的二级映像功能与数据独立性

保证了应用程序的稳定性
除非应用需求本身发生变化,否则应用程序一般不需要修改。

从程序为中心–发展为以数据为中心
具有了数据与程序之间的独立性,使得数据的定义和描述可以从应用程序中分离出去。

数据的存取由数据库管理系统管理
简化了应用程序的编制;
大大减少了应用程序的维护和修改。

15.数据库安全性

15.1什么是数据库的安全性?

据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。

15.2试述实现数据库安全性控制的常用方法和技术

( l )用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。
( 2 )存取控制:通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。例如CZ 级中的自主存取控制( DAC ) , Bl 级中的强制存取控制(MAC )
( 3 )视图机制:为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
( 4 )审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA 可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
( 5 )数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容

16.试述文件系统与数据库系统的区别和联系

文件系统与数据库系统的区别是:
文件系统面向某一应用程序,共享性差,冗余度大,数据独立性差,记录内有结构,整体无结构,由应用程序自己控制。
数据库系统面向现实世界,共享性高,冗余度小,具有较高的物理独立性和一定的逻辑独立性,整体结构化,用数据模型描述,由数据库管理系统提供数据的安全性、完整性、并发控制和恢复能力
文件系统与数据库系统的联系是:

文件系统与数据库系统都是计算机系统中管理数据的软件。解析文件系统是操作系统的重要组成部分;
DBMS 是独立于操作系统的软件。但是 DBMS 是在操作系统的基础上实现的;数据库中数据的组织和存储是通过操作系统中的文件系统来实现的。

17.数据库设计过程

17.1.试述数据库设计过程各个阶段上的设计描述

( l )需求分析:准确了解与分析用户需求(包括数据与处理)。
(产生 流程图,系统关联图/数据流图,数据字典)

( 2 )概念结构设计:通过对用户需求进行综合、归纳与抽象,形成一个独立于具体 DBMS 的概念模型
(设计局部概念模型,综合成全局概念模型,评审)

( 3 )逻辑结构设计:将概念结构转换为某个 DBMS 所支持的数据模型,并对其进行优化。

( 4 )数据库物理设计:为逻辑数据模型选取一个最适合应用环境的物理结构
(包括存储结构和存取方法 B+树,完整性和安全性考虑)。

( 5 )数据库实施:设计人员运用 DBMS 提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。

( 6 )数据库运行和维护:在数据库系统运行过程中对其进行评价、调整与修改。

17.2.什么是数据库的概念结构?试述其特点和设计策略

概念结构是信息世界的结构,即概念模型,其主要特点是:
( l )能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是对现实世界的一个真实模型;
( 2 )易于理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参与是数据库设计成功的关键; ( 3 )易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充;
( 4 )易于向关系、网状、层次等各种数据模型转换。

17.3.什么是数据库的逻辑结构设计?试述其设计步骤

数据库的逻辑结构设计就是把概念结构设计阶段设计好的基本 E 一 R 图转换为与选用的 DBMS 产品所支持的数据模型相符合的逻辑结构
设计步骤为 :
( l )将概念结构转换为一般的关系、网状、层次模型
( 2 )将转换来的关系、网状、层次模型向特定 DBMS 支持下的数据模型转换;
( 3 )对数据模型进行优化