数据库详细思维导图,期末考试、复试必备
数据库
- 一:数据库绪论
- 数据(Data)
- 数据库(Database,简称DB)
- 数据库管理系统(DBMS)
- 数据冗余度:
- 数据的安全性(Security)
- 数据的完整性(Integrity)
- 并发(Concurrency)控制
- 数据库恢复(Recovery)
- 数据模型
- 联系的种类
- 概念模型的表示方法
- 基本数据模型
- 数据库系统的体系结构
- 二: 关系代数
- 三:关系模型
- 四:关系数据库设计理论
- 五:完整性约束
- 六:数据库设计
- 七:数据库查询语言
- SQL的发展
- SQL语言主要组成部分
- 数据定义语言(DDL,Data Definition Language)
- 数据操纵语言(DML,Data Manipulation Language)
- 数据控制语言(DCL,Data Control Language)
- SQL语句
- 视 图 (VIEW)
- 数据查询(Select)
- 数据查询是数据库应用的核心功能
- Select子句——重复元组
- Select子句—— *与属性列表
- Select子句——更名
- Where 子句
- From 子句
- Order By子句
- 子查询(Subquery )
- 聚合函数
- 索引
- 八:数据库恢复技术
- 九:并发控制
一:数据库绪论
数据(Data)
- 计算机用来描述事物的记录(文字.图形.图像.声音)
- 数据的形式本身并不能完全表达其内容,需要经过语义解释。数据与其语义是不可分的
数据库(Database,简称DB)
- 数据库是长期存储在计算机内有结构的大量的共享的数据集合。
数据库管理系统(DBMS)
- 数据库管理系统是位于用户与操作系统之间的一层数据管理软件。
- 数据库在建立、运用和维护时由数据库管理系统统一管理、统一控制。
- 数据库系统(DBS)
- 数据库系统是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。
数据冗余度:
- 指同一数据重复存储时的重复程度。
数据的安全性(Security)
- 数据的安全性是指保护数据,防止不合法使用数据造成数据的泄密和破坏,使每个用户只能按规定,对某些数据以某些方式进行访问和处理。
数据的完整性(Integrity)
- 数据的完整性指数据的正确性、有效性和相容性。即将数据控制在有效的范围内,或要求数据之间满足一定的关系。
并发(Concurrency)控制
- 当多个用户的并发进程同时存取、修改数据库时,可能会发生相互干扰而得到错误的结果并使得数据库的完整性遭到破坏,因此必须对多用户的并发操作加以控制和协调。
数据库恢复(Recovery)
- 计算机系统的硬件故障、软件故障、操作员的失误以及故意的破坏也会影响数据库中数据的正确性,甚至造成数据库部分或全部数据的丢失。DBMS必须具有将数据库从错误状态恢复到某一已知的正确状态(亦称为完整状态或一致状态)的功能。
数据模型
模型
- 是现实世界特征的模拟和抽象
数据模型
- 也是一种模型,它是现实世界数据特征的抽象,表示实体以及实体间的联系
- 一个用于描述数据、数据间关系、数据语义和数据约束的概念工具的集合
两级模型的抽象
- 一是概念模型
- (也称信息模型,用于信息世界的建模),它是按用户的观点来对数据和信息建模,主要用于数据库设计。这类模型强调其语义表达能力,要能够较方便、直接地表达应用中的各种语义知识,这类模型应为概念简单、清晰、易于用户理解,是用户和数据库设计人员之间进行交流的语言。
- 二是数据模型
- (如层次、网状、关系模型,用于机器世界),它是按计算机系统的观点对数据建模,主要用于DBMS的实现。这类模型通常需要有严格的形式化定义,而且常常会加上一些限制或规定,以便于机器上的实现。还通常有一组严格定义了语法和语义的语言,人们可以使用它来定义、操纵数据库中的数据。
数据模型的三要素
- (1) 数据结构
- 数据结构是所研究的对象类型(Object Type)的集合。这些对象是数据库的组成部分。一般可分为两类:一类是与数据类型、内容、性质有关的对象,如网状模型中的数据项、记录,关系模型中的属性、关系等;一类是与数据之间联系有关的对象,如网状模型中的系型(Set Type)等。
- (2) 数据操作
- 数据操作是指对数据库中各种对象(型)的实例(值)允许执行的操作的集合。数据库主要有检索和更新(插入、删除、修改)两大类操作。
- 数据结构是对系统静态特性的描述,数据操作是对系统动态特性的描述。
- (3) 数据的约束条件
- 数据的约束条件是完整性规则的集合。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据状态以及状态的变化,以保证数据的正确、有效、相容。
概念模型
- 实体(Entity)
- 客观存在并可相互区别的事物称为实体。实体可以是具体的人、事、物,也可以是抽象的概念或联系,如学生、部门、课程、银行帐户、选课、订货、演出、比赛等。
- 属性(Attribute)
- 实体所具有的某一特性称为属性。如学生实体可以由学号、姓名、性别、出生年月、系、入学时间等属性组成
- 码(关键字,Key)
- 唯一标识实体的(最小的)属性集称为码。例如学号学生实体的码
- 域(Domain)
- 属性的取值范围称为该属性的域。例如学号的域为8位整数,姓名的域为字符串集合,,性别的域为(男,女)。
- 实体型(Entity Type)
- 具有相同属性的实体必然具有共同的特征和性质。用实体名及其属性名集合来抽象和刻划同类实体,称为实体型。例如:学生(学号,姓名,性别,出生年月,系,入学时间)
- 实体集(Entity Set)
- 同型实体的集合称为实体集。例如,全体学生就是一个实体集。
- 联系(Relationship)
- 在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系。〖组成实体的各属性之间以及不同实体集之间的联系〗
联系的种类
1对1联系
- 定义:若对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1。
1对多联系
- 定义:若对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B具有一对多联系,记为1:n
多对多联系
- 定义:若对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体集B具有多对多联系,记为m:n
概念模型的表示方法
E-R图
- 使用长方形来表示实体型,框内写上实体名
- 椭圆型表示实体的属性,并用无向边把实体和属性连接起来
- 用菱形表示实体间的联系,菱形框内写上联系名,用无向边把菱形分别与有关实体相连接,在无向边旁标上联系的类型,若实体之间联系也具有属性,则把属性和菱形也用无向边连接上
基本数据模型
层次模型(Hierarchical Model)
- 最早使用的一种模型
- 数据结构是一棵有向树
- 特点
- (1) 有且仅有一个结点无双亲,该结点称为根结点。
- (2) 其他结点有且只有一个双亲
网状模型(Network Model)
- 数据结构是一个有向图
- 特点
- (1)有一个以上的结点没有双亲
- (2)结点可以有多于一个的双亲
- 能表示实体之间的多种复杂联系
关系模型(Relational Model)
-
关系模型是用二维表格结构来表示实体及实体之间的联系的模型
-
数据结构是一个“二维表框架”组成的集合
-
关系模型概念简单,清晰,用户易懂易用,有严格的数学基础
-
大多数数据库系统都是关系型的
-
主要术语
- 关系:一个关系对应于我们平常讲的一张表
- 元组:表中的一行称为一个元组
- 属性:表中的一列称为属性,每列的名称为属性名
- 主码:表中的某个属性组,它们的值唯一的标识一个元组
- 域:属性的取值范围
- 分量:元组中的一个属性值
- 关系模式:对关系的描述,用关系名(属性名1,属性名2,…,属性名n)来表示
-
特点
-
- 概念单一:
- 实体或实体之间的联系都用关系表示
- 用户的观点里,数据的逻辑结构就是表
-
- 关系必须是规范化的关系
- 指在关系模型中,每一个关系模式要满足一定的要求或者称为规范条件
- 其最基本的要求是每一个分量是一个不可分的数据项,也就是说,不允许表中还有表。
-
- 用户对数据的检索操作不过是从原来的表中得到一张新的表
- 在用户眼中,无论是原始数据还是结果数据,都是同一种数据结构——二维表。
- 数据操作是集合操作,即操作对象和操作结果都是若干元组的集合,而不象非关系模型中那样单记录的操作方式。
- 把存取路径向用户隐藏起来,提高了数据的独立性。
-
数据库系统的体系结构
三层模式:外模式、模式、内模式
- 外模式
- 又称为用户模式,是数据库用户和数据库系统的接口,是数据库用户的数据视图,是数据库用户可以看见和使用的局部数据的逻辑结构和特征的描述
- 一个数据库通常都有多个外模式。一个应用程序只能使用一个外模式,但同一外模式可为多个应用程序所用
- 模式
- 可细分为概念模式和逻辑模式,是所有数据库用户的公共数据视图,是数据库中全部数据的逻辑结构和特征的描述。
- •一个数据库只有一个模式。模式不但要描述数据的逻辑结构,还要描述数据之间的联系、数据的完整性、安全性要求。
- 内模式
- 又称为存储模式,是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。
- •一个数据库只有一个内模式。内模式并不涉及物理记录,也不涉及硬件设备。
•二层映象功能:外模式/模式映象和模式/内模式映象
- 三层模式关系
- 数据库模式是数据库的核心和关键,外模式通常是模式的子集。数据按外模式的描述提供给用户,按内模式的描述存储在硬盘上,而模式介于外、内模式之间,既不涉及外部的访问,也不涉及内部的存储,从而起到隔离作用,有利于保持数据的独立性,内模式依赖于全局逻辑结构,但可以独立于具体的存储设备
- 映象
- 是一种对应规则,说明映象双方如何进行转换。
- 外模式/模式映象
- 作用:把描述局部逻辑结构的外模式与描述全局逻辑结构的模式联系趣来
- 当模式改变时,只要对外模式/模式映象做相应的改变,使外模式保持不变,则以外模式为依据的应用程序不受影响,从而保证了数据与程序之间的逻辑独立性,也就是数据的逻辑独立性
- 模式/内模式映象
- 作用:把描述全局逻辑结构的模式与描述物理结构的内模式联系起来
- 当内模式改变时,比如存储设备或存储方式有所改变,只要模式/内模式映象做相应的改变,使模式保持不变,则应用程序就不受影响,从而保证了数据与程序之的物理独立性。
二: 关系代数
普通的集合运算
- 并、交、差
删除部分关系的运算
- 选择、投影
合并两个关系元组的运算
- 连接、积
更名操作
关系代数
并Union (∪)
- R和S的并,R∪S,是在R或S或两者中的元素的集合
- 一个元素在并集中只出现一次
- R和S必须同类型(属性集相同、次序相同,但属性名可以不同)
交Intersect (∩)
- R和S的交,R∩S,是在R和S中都存在的元素的集合
- 一个元素在交集中只出现一次
- R和S必须同类型(属性集相同、次序相同,但属性名可以不同)
差Minus (-)
- R和S的差,R-S,是在R中而不在S中的元素的集合
- R和S必须同类型(属性集相同、次序相同,但属性名可以不同)
投影Projection(π)
- 从关系R中选择若干属性组成新的关系
- πA1,A2,…,An®,表示从R中选择属性集A1,A2,…,An组成新的关系
- 列的运算
- 投影运算的结果中,也要去除可能的重复元组
广义笛卡儿积(×)
- 关系R、S的广义笛卡儿积是两个关系的元组对的集合所组成的新关系
- R×S:
- 属性是R和S的组合(有重复)
- 元组是R和S所有元组的可能组合
- 是R、S的无条件连接,使任意两个关系的信息能组合在一起
选择Selection(σ)
- 从关系R中选择符合条件的元组构成新的关系
- σC®,表示从R中选择满足条件(使逻辑表达式C为真)的元组
- 行的运算
条件连接(θ)
- 从R×S的结果集中,选取在指定的属性集上满足AθB条件的元组,组成新的关系
- θ是一个关于属性集的比较运算符
- θ为“=”的连接运算称为等值连接。
自然连接
- 从R×S的结果集中,选取在某些公共属性上具有相同值的元组,组成新的关系
- R、S的公共属性
- 属性集的交集(名称及类型相同)
*特点: 公共属性在结果中只出现一次
- 属性集的交集(名称及类型相同)
- 等值连接
三:关系模型
四:关系数据库设计理论
对数据库操作时,会出现以下问题
-
-
数据冗余(系主任名的存储次数)
数据重复存储:浪费存储空间,数据库维护困难(更新异常)
-
-
- 插入异常(一个系刚成立)
- 主码为空的记录不能存在与数据库,导致不能进行插入操作
-
-
删除异常(一个系的学生全部毕业)
删除操作后,一些相关信息无法保存在数据库中
-
要消除以上的“弊病”,把上面的关系数据库模式分解为三个关系模式
函数依赖
类似于变量之间的单值函数关系
Y=F(X),其中自变量X的值,决定一个唯一的函数值Y
在一个关系模式里的属性,由于它在不同元组里属性值可能不同,由此可以把关系中的属性看作变量。 一个属性与另一个属性在取值上可能存在制约关系
几点说明
-
- 函数依赖是语义范畴的概念.它反映了一种语义完整性约束,只能根据语义来确定一个函数依赖.
-
- 函数依赖是指关系R模式的所有关系元组均应满足的约束条件,而不是关系模式中的某个或某些元组满足的约束条件
候选码的两个性质
-
- 标识的唯一性: 对于R(U)中的每一元组,K的值确定后,该元组就相应确定了.
-
- 无冗余性: K是属性组的情况下,K的任何一部分都不能唯一标识该元组(定义中的完全函数依赖的意义)
范式
第一范式(1NF)
- 定义5: 在关系模式R中的每一个具体关系r中,如果每个属性值都是不可再分的最小数据单位,则称R是第一范式的关系,记作R∈1NF.
- 数据库理论研究的是规范化关系.
- 1NF规范化: 把非规范化关系规范提高到1NF关系模式的集合.
第二范式(2NF)
- 定义6: 若关系模式R∈1NF,且每个非主属性都完全依赖于R的任意候选码,则关系模式R属于第二范式,记作R ∈2NF.
- 2NF规范化是把1NF关系模式规范提高到变成2NF关系模式的集合.
- 从1NF中消除非主属性对候选码的部分函数依赖,则获得2NF关系.
- 举例:UN(Sno,Cno,G,SDN,MN)
第三范式(3NF)
- : 若关系模式R∈2NF,且每个非主属性都不传递依赖于R的任意候选码,则R∈3NF.
- 从2NF关系中,消除非主属性对码的传递依赖函数而获得3NF关系
- R∈3NF,则每个非主属性既不部分依赖,也不传递依赖于R的任何候选码.
BCNF范式
- 定义8: 若R∈1NF,且R中每个决定因素都是候选码,则R ∈BCNF.
* 满足BCNF的关系将消除任何属性对候选码的部分依赖与传递依赖
* 应用BCNF定义时,可直接判断1NF是否属于BCNF
五:完整性约束
六:数据库设计
数据库设计的步骤
⒈需求分析阶段
- 收集和分析用户需求,结果得到数据字典描述的数据需求。
- 常用的调查方法
- ⑴跟班作业
- ⑵开调查会
- ⑶请专人介绍
- ⑷询问对某些调查中的问题,可以找专人询问。
- ⑸设计调查表请用户填写
- ⑹查阅记录
⒉概念结构设计阶段
- 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表示。这是数据库设计的关键
⒊逻辑结构设计阶段
- 将概念结构转换为某个DBMS所支持的数据模型(例如关系模型),并对其进行优化(例如使用范式理论)
⒋数据库物理设计阶段
- 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
⒌数据库实施阶段
- 运用DBMS提供的数据语言(例如SQL)及其宿主语言(例如C),根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行
⒍数据库运行和维护阶段
- 数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改
数据字典
- 对数据库设计来讲,数据字典是进行数据收集和数据分析所获得的主要成果。数据字典是各类数据描述的集合。
- 数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分。
- 数据项是不可再分的数据单位
- 数据结构反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成
- 数据流是数据结构在系统内传输的路径
- 数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一
- 处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流}, 处理:{简要说明}}
设计概念结构通常有四类方法
自顶向下
- 即首先定义全局概念结构的框架,然后逐步细化。
自底向上
- 即首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构。这是最经常采用的策略。即自顶向下地进行需求分析,然后再自底向上地设计概念结构
逐步扩张
- 首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构
混合策略
- 即将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构
E-R图
要点
- 使用长方形来表示实体型,框内写上实体名
- 椭圆型表示实体的属性,并用无向边把实体和属性连接起来。
- 用菱形表示实体间的联系,菱形框内写上联系名,用无向边把菱形分别与有关实体相连接,在无向边旁标上联系的类型,若实体之间联系也具有属性,则把属性和菱形也用无向边连接上。
E-R图之间的冲突主要有三类
- 属性冲突
- (1) 属性域冲突,即属性值的类型、取值范围或取值集合不同。
- (2) 属性取值单位冲突
- 命名冲突
- (1) 同名异义
- (2) 异名同义(一义多名)
- 结构冲突
- (1) 同一对象在不同应用中具有不同的抽象。例如“教材”在某一局部应用中被当作实体,而在另一局部应用中则被当作属性
- (2) 同一实体在不同局部视图中所包含的属性不完全相同,或者属性的排列次序不完全相同
- (3) 实体之间的联系在不同局部视图中呈现不同的类型。例如实体E1与E2在局部应用A中是多对多联系,而在局部应用B中是一对多联系;又如在局部应用X中E1与E2发生联系,而在局部应用Y中E1、E2、E3三者之间有联系
数据库物理设计
- 确定数据库存储结构时要综合考虑存取时间、存储空间利用率和维护代价三方面的因素。这三个方面常常是相互矛盾的。
为了提高系统性能,数据应该根据应用情况将易变部分与稳定部分、经常存取部分和存取频率较低部分分开存放
七:数据库查询语言
SQL的发展
1974年,由Boyce和Chamberlin提出
1975~1979,IBM San Jose Research Lab的关系数据库管理系统原型System R实施了这种语言
SQL-86是第一个SQL标准
SQL-89、SQL-92(SQL2)、SQL-99(SQL3)
SQL语言主要组成部分
数据定义语言(DDL,Data Definition Language)
- 数据定义语言是指用来定义和管理数据库以及数据库中的各种对象的语句,这些语句包括CREATE、ALTER和DROP等语句。在SQL Server中,数据库对象包括表、视图、触发器、存储过程、规则、缺省、用户自定义的数据类型等。这些对象的创建、修改和删除等都可以通过使用CREATE、ALTER、DROP等语句来完成。
- 常见的数据类型
- 字符型:
-
定长字符型 char(n) 由于是定长,所以速度快
-
变长字符型 varchar(n)
-
- 数值型:
-
整型 int(或integer) -231~+231
-
短整型 smallint -215~+215的
-
浮点型 real、float、double
-
数值型 numeric (p [,d])
-
- 日期/时间型:
-
DateTime
-
- 文本和图像型
- Text:存放大量文本数据。在SQLServer中,Text对象实际为一指针
- Image:存放图形数据
- 字符型:
数据操纵语言(DML,Data Manipulation Language)
- 数据操纵语言是指用来查询、添加、修改和删除数据库中数据的语句,这些语句包括SELECT、INSERT、UPDATE、DELETE等。在默认情况下,只有sysadmin、dbcreator、db_owner或db_datawriter等角色的成员才有权利执行数据操纵语言。
数据控制语言(DCL,Data Control Language)
- 数据控制语言(DCL)是用来设置或者更改数据库用户或角色权限的语句,这些语句包括GRANT、REVOKE 、DENY等语句,在默认状态下,只有sysadmin、dbcreator、db_owner或db_securityadmin等角色的成员才有权利执行数据控制语言。
SQL语句
建立表结构 Create
- 定义基本表的语句格式:
- CREATE TABLE <表名>(<列定义>[{,<列定义>,<表约束>}])
- 表名:
- 列定义:列名、列数据类型、长度、是否允许空值等。
- 定义完整性约束:列约束和表约束
- [CONSTRAINT<约束名>] <约束定义>
删除表结构 Drop
- 用SQL删除关系(表)
- 将整个关系模式(表结构)彻底删除
- 表中的数据也将被删除
修改表结构 Alter
- 增加表中的属性
- 向已经存在的表中添加属性
- allow null (新添加的属性要允许为空)
- 已有的元组中该属性的值被置为Null
- 修改表中的某属性(某列)
- 修改属性类型或精度
- 删除表中的某属性(某列)
- 去除属性及相应的数据
向表中添加数据(Insert)
- 数据添加
- 用SQL的插入语句,向数据库表中添加数据
- 按关系模式的属性顺序
- 按指定的属性顺序,也可以只添加部分属性(非Null属性为必需)
数据删除(Delete)
- 只能对整个元组操作,不能只删除某些属性上的值
- 只能对一个关系起作用,若要从多个关系中删除元组,则必须对每个关系分别执行删除命令
- 删除单个元组
- 删除多个元组
- 删除整个关系中的所有数据
数据更新(Update)
- 改变符合条件的某个(某些)元组的属性值
视 图 (VIEW)
视图是从一个或者多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。和真实的表一样,视图也包括几个被定义的数据列和多个数据行,但从本质上讲,这些数据列和数据行来源于其所引用的表。因此,视图不是真实存在的基础表而是一个虚拟表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。
创建视图
视图的更新
数据查询(Select)
数据查询是数据库应用的核心功能
Select子句——重复元组
- SQL具有包的特性
- Select 子句的缺省情况是保留重复元组( ALL ),可用 Distinct 去除重复元组
- 去除重复元组:费时
- 需要临时表的支持
Select子句—— *与属性列表
- 星号 * 表示所有属性
- 星号 * :按关系模式中属性的顺序排列
- 显式列出属性名:按用户顺序排列
Select子句——更名
- 为结果集中的某个属性改名
- 使结果集更具可读性
Where 子句
- 查询满足指定条件的元组可以通过Where子句来实现
- 使where子句中的逻辑表达式返回True值的元组,是符合要求的元组,将被选择出来
- Where 子句——运算符
- 比较:<、<=、>、>=、=、<> 等
- 确定范围:
- Between A and B、Not Between A and B
- 确定集合:IN、NOT IN
- 字符匹配:LIKE,NOT LIKE
- 空值:IS NULL、IS NOT NULL
- 多重条件:AND、OR、NOT
- Where 子句——Like
- 字符匹配:Like、Not Like
- 通配符
- % —— 匹配任意字符串
- _ —— 匹配任意一个字符
- 大小写敏感
- Where 子句——转义符 escape
From 子句
- 列出将被查询的关系(表)
- From 子句——元组变量
- 为 From 子句中的关系定义元组变量
- 方便关系名的引用
- 连接子句
- 内连接
- 内连接是指包括符合条件的每个表的记录,也称之为全记录操作。
- 外连接
- 外连接是指把两个表分为左右两个表。右外连接是指连接满足条件右侧表的全部记录。左外连接是指连接满足条件左侧表的全部记录。全外连接是指连接满足条件表的全部记录。
- 左外连接
- 右外连接
- 全外连接
- 内连接
Order By子句
- 指定结果集中元组的排列次序
- 耗时
- ASC升序(缺省)、DESC降序
子查询(Subquery )
-
子查询是嵌套在另一查询中的 Select-From-Where 表达式(Where/Having)
-
SQL允许多层嵌套,由内而外地进行分析,子查询的结果作为父查询的查找条件
-
可以用多个简单查询来构成复杂查询,以增强SQL的查询能力
-
子查询中不使用 Order By 子句,Order By子句只能对最终查询结果进行排序
-
子查询——单值比较
- 返回单值的子查询,只返回一行一列
- 父查询与单值子查询之间用比较运算符进行连接
- 运算符:>、>=、=、<=、<、 <>
-
子查询——多值
-
子查询返回多行一列
-
运算符:In、All、Some(或Any)、Exists
-
子查询——多值成员In
- 若值与子查询返回集中的某一个相等,则返回true
- IN 被用来测试多值中的成员
- 若值与子查询返回集中的某一个相等,则返回true
-
子查询——多值比较 ALL
-
父查询与多值子查询之间的比较用All来连接
-
值s比子查询返回集R中的每个都大时,s>All R 为True
-
All表示所有
-
all、< all、<=all、>=all、<> all
-
<> all 等价于 not in
-
-
子查询——多值比较Some/Any
-
父查询与多值子查询之间的比较需用Some/Any来连接
-
值s比子查询返回集R中的某一个都大时返回 Ture
- s > Some R为True 或
- s > Any R为True
-
Some(早期用Any)表示某一个(任意一个)
-
some、< some、<=some、>=some、<> some
-
= some 等价于 in、<> some 不等价于 not in
-
-
-
-
子查询——存在判断Exists
- Exists + 子查询用来判断该子查询是否返回元组
- 当子查询的结果集非空时,Exists为True
- 当子查询的结果集为空时,Exists为False
- 不关心子查询的具体内容,因此用 Select *
- 具有外部引用的子查询,称为相关子查询(Correlated Queries)
- 外层元组的属性作为内层子查询的条件
聚合函数
- 把一列中的值进行聚合运算,返回单值的函数
- 五个预定义的聚合函数
- 平均值:Avg( )
- 总和: Sum( )
- 最小值:Min( )
- 最大值:Max( )
- 计数: Count( ) 返回所选列中不为NULL的数
- Group By
- 将查询结果集按某一列或多列的值分组,值相等的为一组,一个分组以一个元组的形式出现
- 只有出现在Group By子句中的属性,才可出现在Select子句中
- Having
- 针对聚合函数的结果值进行筛选(选择),它作用于分组计算结果集
- 跟在Group By子句的后面。
- Having 与 Where的区别
- Where 决定哪些元组被选择参加运算,作用于关系中的元组
- Having 决定哪些分组符合要求,作用于分组
- 聚合函数的条件关系必须用Having,Where中不应出现聚合函数
- 聚合函数对Null的处理
- Count:不计
- Sum:不将其计入
- Avg:具有 Null 的元组不参与
- Max / Min:不参与
索引
数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单
索引的作用
- 通过创建唯一索引,可以保证数据记录的唯一性。
- 可以大大加快数据检索速度。
- 可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
- 在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间。
- 使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能
聚集索引与非聚集索引
- 聚集索引对表的物理数据页中的数据按列进行排序,然后再重新存储到磁盘上,即聚集索引与数据是混为一体的,它的叶节点中存储的是实际的数据
- 非聚集索引具有完全独立于数据行的结构,使用非聚集索引不用将物理数据页中的数据按列排序。非聚集索引的叶节点存储了组成非聚集索引的关键字值和行定位器
Transaction_SQL 语句
- 赋权语句——Grant
- 收回权限——Revoke
- 收回权限——Deny
八:数据库恢复技术
什么是事务
事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位
事务和程序是两个概念
- 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序
- 一个应用程序通常包含多个事务
事务是恢复和并发控制的基本单位
事务结束
COMMIT
- 事务正常结束
- 提交事务的所有操作(读+更新)
- 事务中所有对数据库的更新永久生效
ROLLBACK
- 事务异常终止
- 事务运行的过程中发生了故障,不能继续执行
- 回滚事务的所有更新操作
- 事务滚回到开始时的状态
事务的特性(ACID特性)
原子性(Atomicity)
- 事务是数据库的逻辑工作单位
- 事务中包括的诸操作要么都做,要么都不做
一致性(Consistency)
- 事务执行的结果必须是使数据库从一个 一致性状态变到另一个一致性状态
- 一致性状态:
- 数据库中只包含成功事务提交的结果
- 不一致状态:
- 数据库中包含失败事务的结果
隔离性(Isolation)
-
对并发执行而言一个事务的执行不能被其他事务干扰
-
一个事务内部的操作及使用的数据对其他并发事务是隔离的
-
并发执行的各个事务之间不能互相干扰
持续性(Durability )
- 持续性也称永久性(Permanence)
- 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
- 接下来的其他操作或故障不应该对其执行结果有任何影响。
常见故障原因
- 计算机硬件故障
- 系统软件和应用软件的错误
- 操作员的失误
- 恶意的破坏
故障的影响
- 运行事务非正常中断
- 破坏数据库
故障的种类
- 事务故障
- 系统故障
- 介质故障
- 计算机病毒
恢复的实现技术
数据转储(backup)
登录日志文件(logging)
九:并发控制
多事务执行方式
(1)事务串行执行
- 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行
- 不能充分利用系统资源,发挥数据库共享资源的特点
(2)交叉并发方式(interleaved concurrency)
- 事务的并行执行是这些并行事务的并行操作轮流交叉运行
- 是单处理机系统中的并发方式,能够减少处理机的空闲时间,提高系统的效率
(3)同时并发方式(simultaneous concurrency)
- 多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行
- 最理想的并发方式,但受制于硬件环境
- 更复杂的并发方式机制
并发操作带来的数据不一致性
丢失修改(lost update)
- 丢失修改是指事务1与事务2从数据库中读入同一数据并修改
- 事务2的提交结果破坏了事务1提交的结果,导致事务1的修改被丢失。
不可重复读(non-repeatable read)
- 不可重复读是指事务1读取数据后,事务2执行更新操作,使事务1无法再现前一次读取结果。
读“脏”数据(dirty read)
- 事务1修改某一数据,并将其写回磁盘
- 事务2读取同一数据后
- 事务1由于某种原因被撤消,这时事务1已修改过的数据恢复原值
- 事务2读到的数据就与数据库中的数据不一致,
- 是不正确的数据,又称为“脏”数据。
*
什么是*
- *就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁
- 加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
- *是实现并发控制的一个非常重要的技术
基本*类型
- 排它锁(eXclusive lock,简记为X锁)
- 排它锁又称为写锁
- 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁
- 共享锁(Share lock,简记为S锁)
- 共享锁又称为读锁
- 若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁
*协议
1级*协议
- 事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放
- 1级*协议可防止丢失修改
- 在1级*协议中,如果是读数据,不需要加锁的,所以它不能保证可重复读和不读“脏”数据。
- 读“脏”数据
- 不可重复读
2级*协议
- 1级*协议+事务T在读取数据R前必须先加S锁,读完后即可释放S锁
- 2级*协议可以防止丢失修改和读“脏”数据。
- 在2级*协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。
3级*协议
- 1级*协议 + 事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放
- 3级*协议可防止丢失修改、读脏数据和不可重复读。
上一篇: MongoDB高级查询[聚合Group]
下一篇: 数据库期末实验
推荐阅读