数据库面试基础知识总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【数据库基础知识总结】1 / 15
1. 数据抽象:物理抽象、概念抽象、视图级抽象,内模式、模式、外模式提示:(1). 概念模式:(面向单个用户的)
是数据中全部数据的整体逻辑结构的描述。
它由若干个概念记录类型组成。
(2). 外模式:(面向全局的)
是用户与数据库系统的接口,是用户用到的那部分数据的描述。
它由若干个外部记录类型组成。
(3). 内模式:(面向存储的)
是数据库在物理存储方面的描述,它定义所有的内部记录类型、索引、和文件的组织方式,以及数据控制方面的细节。
模式描述的是数据的全局逻辑结构,外模式描述的是数据的局部逻辑结构。
对应与同一个模式可以有任意多个外模式。
在数据库中提供两级映像功能,即外模式/模式映像和模式/内模式映像。
对于没一个外模式,数据库系统都有一个外模式/模式映像它定义了该外模式与模式之间的对应关系。
这些映像定义通常包括在各自外模式的描述中,当模式改变时,由数据库管理员对各个外模式/模式的映像做相应改变,可以使外模式保持不变,从而应用程序不必修改,保证了数据的逻辑独立性。
数据库中只有一个模式,也只有一个内模式,所以模式/内模式映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系。
当数据库的存储结构改变了,由数据库管理员对模式/内模式映像做相应改变,可以使模式保持不变,从而保证了数据的物理独立性。
2. SQL语言包括数据定义、数据操纵(Data Manipulation),数据控制(Data Control)
数据定义:Create Table,Alter Table,Drop Table,Craete/Drop Index等
数据操纵:Select ,insert,update,delete,
数据控制:grant,revoke
3. SQL常用命令
CREATE TABLE Student( ID NUMBER PRIMARY KEY,NAME VARCHAR2(50) NOT NULL);//建表
CREATE VIEW view_name AS Select * FROM Table_name;//建视图
Create UNIQUE INDEX index_name ON TableName(col_name);//建索引
INSERT INTO tablename {column1,column2,…} values(exp1,exp2,…);//插入
INSERT INTO Viewname {column1,column2,…} values(exp1,exp2,…);//插入视图实际影响表
UPDATE tablename SET name=’zang 3’condition;//更新数据
DELETE FROM Tablename WHERE condition;//删除
GRANT (Select,delete,…) ON (对象) TO USER_NAME [WITH GRANT OPTION];//授权REVOKE (权限表) ON(对象) FROM USER_NAME [WITH REVOKE OPTION] //撤权
列出工作人员及其领导的名字:
Select , FROM EMPLOYEE E S WHERE E.SUPERName=
4. 视图提示:
计算机数据库中的视图是一个虚拟表,其内容由查询定义。
同真实的表一样,视图包含一系列带有名称的列和行数据。
但是,视图并不在数据库中以存储的数据值集形式存在。
行和列数据来自由定义视图的
【数据库基础知识总结】2 / 15
查询所引用的表,并且在引用视图时动态生成。
从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。
从数据库系统内部来看,一个视图是由SELECT语句组
成的查询定义的虚拟表。
从数据库系统内部来看,视图是由一张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,例如查询,插入,修改,删除操作等。
5. 完整性约束:实体完整性、参照完整性、用户定义完整性提示:定义:关系完整性是为保证数据库中数据的正确性和相容性,对关系模型提出的某种约束条件或规则。
完整性通常包括域完整性,实体完整性、参照完整性和用户定义完整性,其中域完整性,实体完整性和参照完整性,是关系模型必须满足的完整性约束条件。
(1). 域完整性约束:域完整性是保证数据库字段取值的合理性。
属性值应是域中的值,这是关系模式规定了的。
除此之外,一个属性能否为NULL,这是由语义决定的,也是域完整性约束的主要内容。
域完整性约束是最简单、最基本的约束。
在当今的关系DBMS中,一般都有域完整性约束检查功能。
包括检查(CHECK)、默认值(DEFAULT)、不为空(NOT NULL)等。
(2). 实体完整性实体完整性是指关系的主关键字不能重复也不能取“空值\"。
一个关系对应现实世界中一个实体集。
现实世界中的实体是可以相互区分、识别的,也即它们应具有某种惟一性标识。
在关系模式中,以主关键字作为惟一性标识,而主关键字中的属性(称为主属性)不能取空值,否则,表明关系模式中存在着不可标识的实体(因空值是“不确定\"的),这与现实世界的实际情况相矛盾,这样的实体就不是一个完整实体。
按实体完整性规则要求,主属性不得取空值,如主关键字是多个属性的组合,则所有主属性均不得取空值。
如表1.1将编号作为主关键字,那么,该列不得有空值,否则无法对应某个具体的职工,这样的表格不完整,对应关系不符合实体完整性规则的约束条件。
(3). 参照完整性参照完整性是定义建立关系之间联系的主关键字与外部关键字引用的约束条件。
关系数据库中通常都包含多个存在相互联系的关系,关系与关系之间的联系是通过公共属性来实现的。
所谓公共属性,它是一个关系R(称为被参照关系或目标关系)的主关键字,同时又是另一关系K(称为参照关系)的外部关键字。
如果参照关系K中外部关键字的取值,要么与被参照关系R中某元组主关键字的值相同,要么取空值,那么,在这两个关系间建立关联的主关键字和外部关键字引用,符合参照完整性规则要求。
如果参照关系K的外部关键字也是其主关键字,根据实体完整性要求,主关键字不得取空值,因此,参照关系K 外部关键字的取值实际上只能取相应被参照关系R中已经存在的主关键字值。
在学生管理数据库中,如果将选课表作为参照关系,学生表作为被参照关系,以“学号\"作为两个关系进行关联的属性,则“学号\”是学生关系的主关键字,是选课关系的外部关键字。
选课关系通过外部关键字“学号’’参照学生关系。
(4). 用户定义完整性实体完整性和参照完整性适用于任何关系型数据库系统,它主要是针对关系的主关键字和外部关键字取值必须有效而做出的约束。
用户定义完整性则是根据应用环境的要求和实际的需要,对某一具体应用所涉及的数据提出约束性条件。
这一约束机制一般不应由应用程序提供,而应有由关系模型提供定义并检验,用户定义完整性主要包括字段有效性约束和记录有效性。
【数据库基础知识总结】3 / 15
6. 第三范式:提示:
(1).第一范式(1NF):在关系模式R中的每一个具体关系r中,如果每个属性值都是不可再分的最小数据单位,则称R是第一范式的关系。
例:如职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话和一个家里电话号码)规范成为1NF有三种方法:一是重复存储职工号和姓名。
这样,关键字只能是电话号码。
二是职工号为关键字,电话号码分为单位电话和住宅电话两个属性三是职工号为关键字,但强制每条记录只能有一个电话号码。
以上三个方法,第一种方法最不可取,按实际情况选取后两种情况。
(2).第二范式(2NF):如果关系模式R(U,F)中的所有非主属性都完全依赖于任意一个候选关键字,则称关系R 是属于第二范式的。
例:选课关系SCI(SNO,CNO,GRADE,CREDIT)其中SNO为学号,CNO为课程号,GRADEGE 为成绩,CREDIT 为学分。
由以上条件,关键字为组合关键字(SNO,CNO) 在应用中使用以上关系模式有以下问题: a.数据冗余,假设同一门课由40个学生选修,学分就重复40次。
b.更新异常,若调整了某课程的学分,相应的元组CREDIT值都要更新,有可能会出现同一门课学分不同。
c.插入异常,如计划开新课,由于没人选修,没有学号关键字,只能等有人选修才能把课程和学分存入。
d.删除异常,若学生已经结业,从当前数据库删除选修记录。
某些门课程新生尚未选修,则此门课程及学分记录无法保存。
原因:非关键字属性CREDIT仅函数依赖于CNO,也就是CREDIT部分依赖组合关键字(SNO,CNO)而不是完全依赖。
解决方法:分成两个关系模式SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。
新关系包括两个关系模式,它们之间通过SC1中的外关键字CNO相联系,需要时再进行自然联接,恢复了原来的关系
(3).第三范式(3NF):如果关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递信赖,则称关系R是属于第三范式的。
例:如S1(SNO,SNAME,DNO,DNAME,LOCATION)各属性分别代表学号,姓名,所在系,系名称,系地址。
关键字SNO决定各个属性。
由于是单个关键字,没有部分依赖的问题,肯定是2NF。
但这关系肯定有大量的冗余,有关学生所在的几个属性DNO,DNAME,LOCATION将重复存储,插入,删除和修改时也将产生类似以上例的情况。
原因:关系中存在传递依赖造成的。
即SNO -> DNO。
而DNO -> SNO却不存在,DNO -> LOCATION,因此关键辽SNO 对LOCATION 函数决定是通过传递依赖SNO -> LOCATION 实现的。
也就是说,SNO不直接决定非主属性LOCATION。
解决目地:每个关系模式中不能留有传递依赖。
解决方法:分为两个关系S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION) 注意:关系S中不能没有外关键字DNO。
否则两个关系之间失去联系。
【数据库基础知识总结】4 / 15
7. ER(实体/联系)模型提示:实体-关系模型是面向现实世界,而不是面向实现方法的,它主要是用于描述现实信息世界中数据的静态特性,而不涉及数据的处理过程。
基本概念:实体:现实世界中任何可以相互区分的事物。
解释:实体可以是人,也可以是物;可以指实际的对象,也可以指某些概念。
例如,一个职工、一个学生、一门课,学生的一些选课。
属性:实体(或联系)所具有的某方面特征(相当于数据库表的字段(列)。
例如:学生实体,可由学号、姓名、性别、年龄、系、年级。
(9673101,王平,男,22,计算机系,三年级)这些属性组合起来就表现了一个学生的情况。
(相当于记录,特性为字段)。
联系:发生在实体之间具有特定含义的对应关系PS:实体、属性一般是名词,联系一般是动词ER图中的四个基本成分: 1.矩形框,表示实体 2.菱形框,表示实体之间的联系3.椭圆形框,表示实体或联系的属性 4.直线,连接实体、属性、和联系。
直线端部标注联系的种类(1:1、1:N或M:N) 连个实体(或表)之间的联系分为三类:(1). 一对一联系(1:1)如果实体集合A中的每一个实体,实体集合B中至少都一个实体与之联系,反之亦然,则称为实体集合A与实体集合B具有一对一联系,记为1:1。
例如,一个班级有一个班长。
(2). 一对多联系(1:n)如果实体集合A中的每一个实体,实体集合B中至少都n(n>=0)个实体与之联系,反之,对于实体集合B中每一个实体,实体集合A中的至多有一个实体与之联系,则称为实体集合A与实体集合B具有一对多联系,记为1:n。
例如,一个班级有多个
班干部。
(3). 多对多联系(m:n)如果实体集合A中的每一个实体,实体集合B中至少有n(n>=0)个实体与之联系,反之,对于实体集合B中每一个实体,实体集合A中的至少有m(m>=0)个实体与之联系,则称为实体集合A与实体集合B具有多对多联系,记为m:n。
例如,一个学生可以选修多门课,一门课可以有多个学生选修。
8. 索引的作用提示:
可以利用索引快速访问数据库表中的特定信息。
索引是对数据库表中一个或多个列(例如,employee 表的姓氏(lname) 列)的值进行排序的结构。
如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。
数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。
在数据库关系图中,可以为选定的表创建、编辑或删除索引/键属性页中的每个索引类型。
当保存附加在此索引上的表或包含此表的数据库关系图时,索引同时被保存。
有关详细信息,请参见创建索引。
通常情况下,只有当经常查询索引列中的数据时,才需要在表上创建索引。
索引将占用磁盘空间,并且降低添加、删除和更新行的速度。
不过在多数情况下,索引所带来的数据检索速度的优势大大超过它的不足之处。
然而,如果应用程序非常频繁地更新数据,或磁盘空间有限,那么最好限制索引的数量。
在创建索引前,必须确定要使用的列和要创建的索引类型。
9. 事务提示:数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作。
事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。
通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。
一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。
数据库事务的ACID特性
(1). 原子性(atomic)(atomicity) 事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
通常,与某个事务关联的操作具有共同的目标,并且是相互依赖的。
如果系统只执行这些操作的一个子集,则可能会破坏事务的总体目标。
原子性消除了系统处理操作子集的可能性。
(2). 一致性(consistent)(consistency) 事务在完成时,必须使所有的数据都保持一致状态。
在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。
事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
某些维护一致性的责任由应用程序开发人员承担,他们必须确保应用程序已强制所有已知的完整性约束。
例如,当开发用于转帐的应用程序时,应避免在转帐过程中任意移动小数点。
(3). 隔离性(insulation)(isolation) 由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。
事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。
这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
当事务可序列化时将获得最高的隔离级别。
在此级别上,从一组可并行执行的事务获得的结果与通过连续运行每个事务所获得的结果相同。
由于高度隔离会限制可并行执行的事务数,所以一些应用程序降低隔离级别以换取更大的吞吐量。
防止数据丢失
(4). 持久性(Duration)(durability) 事务完成之后,它对于系统的影响是永久性的。
该修改即使出现致命的系统故障也将一直保持。
10. 数据库中的锁
提示:在数据库中引入锁的原因:多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: (1). 丢失更新:A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统。
(2). 脏读:A用户修改了数据,随后B 用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致。