数据库概论

第一章 绪论

一、

  • 数据:数据库中存储的基本对象,描述事物的符号记录。

  • 数据库(DB):长期储存在计算机内、有组织、可共享的大量数据。【基本特征:永久存储、有组织、可共享】

  • 数据库管理系统(DBMS):执行数据库管理任务所需的软件。【功能:数据定义功能,数据组织、存储和管理,数据操作功能,数据库的事物管理和运行管理,数据库的建立和维护功能 】

  • 数据库系统:由数据库、数据库管理系统、应用系统、数据库管理员构成。

在这里插入图片描述
5. 三个阶段

  • 人工管理阶段:数据不保存应用程序管理数据、数据不共享、数据不具有独立性
  • 文件系统阶段:可长期保存、有文件系统管理数据、数据共享性差、冗余度高、数据独立性差
  • 数据库系统阶段:数据结构化、共享性高、冗余度低、容易扩充、数据独立性高、数据由DBMS管理和控制

二、

  1. 数据模型:对现实世界数据特征的抽象。
    数据模型分为两类:
    (1)概念模型(设计)
    (2)逻辑模型(结构)和物理模型(存储)
    【逻辑模型中对的关系模型对用户来说是一张表

  2. 数据模型的组成数据结构、数据操作和完整性约束三部分组成。【怎么存、怎么做、做的规则】

  3. 实体型之间的联系
    (1)一对一联系【班级-------班长】。
    (2)一对多联系【班级-------学生】。
    (3)多对多联系【课程-------学生】。

  4. 实体联系图(E-R图):是一种用来描述实体与实体之间联系的概念模型,提供了实体型、属性和联系的方法。【实体型用矩形,属性用椭圆、联系用菱形
    在这里插入图片描述

两条准则:
(1)作为属性,不能再具有需要描述的性质。属性必须是不可分的数据项,不能包含其他属性
(2)属性不能与其他实体具有联系,即E-R图中所表示的联系是实体之间的联系。

E-R图的集成:

  1. 合并:
    解决各分E-R图之间的冲突,将分E-R图合并起来生成初步E-R图。
    【注意属性(域、单位)冲突、命名冲突(同名异义、一义多名)、结构冲突(在某一表是属性,而在另一表是实体)】
  2. 修改和重构。
    消除不必要的冗余,生成基本E-R图。
    【所谓冗余的数据是指可由基本数据导出的数据,冗余的联系是指可由其他联系导出的联系

用规范化理论消除冗余
①确定分E-R图实体之间的数据依赖FL
②求FL的最小覆盖GL,差集为D=FL-GL
逐一考察D中的函数依赖,确定是否是冗余的联系。若是,就把它去掉。(D中存在冗余联系,但并非D中都是冗余联系)

三、关系模型

  1. 关系:一个关系对应一张表

三类关系:

  1. 基本关系(基表):实际存在的表,实际存储数据的逻辑表示(最原始的表)
  2. 查询表:查询结果对应的表
  3. 视图表:由基表或其他视图导出的表(虚表)【数据库中只存放视图的定义,而不存放视图对应的数据;可在视图上在定义视图】
  1. 关系的目或度
    在这里插入图片描述
    当n=1:单元关系;当n=2:二元关系。
  2. 元组:表中的一行,对应于存储文件中的一个记录
  3. 属性:表中的一列
  4. 分量 :元组中的一个属性值。(分量必须取原子值)
  5. 关键字/码(Key)唯一标识实体的属性集
  1. 候选码:能唯一标识一个元组的属性组成的集合。
  2. 全码:一个关系模型的所有属性一起构成该关系的码(主键)
  3. 主码:在若干个候选码中指定作为码的属性(或属性组合)
  4. 外码:F是基本关系R的一组(个)属性,但不是关系R的码。若F域基本关系S的主码K相对应,则称F是基本关系R的外码
    【基本关系表R:参照关系;基本关系表S:被参照关系】
  5. 主属性:候选码的诸属性
  6. 非主属性:不包括在任何候选码中的属性
  1. :属性的取值范围。【年龄的域为正整数】
  2. 基数:域中取值个数。
  3. 关系模式 :对关系的描述
    【关系名(属性1,属性2,…,属性n)------学生(学号,姓名,年龄)】

关系模式是静态的、稳定的
关系是动态的、随时间不断变化的
关系是关系模式在某一时间的状态或内容

  1. 笛卡尔积:(可用一张表表示)设关系R为n列,k1行,关系S为m列,k2行,则关系R和S的笛卡尔积,是R中每个元组和S中每个元组连接产生的新关系。记作:R×S
  2. 关系模型中的关系要满足实体完整性(唯一标识—主键)和参照完整性(信息对外对内一致----外键)与用户定义的完整性(信息合理性)

四、

  1. 数据库系统模式:数据库中全体数据的逻辑结构和特征的描述

  2. 数据库系统的三级模式结构
    在这里插入图片描述

    • 外模式(用户模式):呈现给应用程序的数据模式【模式的子集】
    • 模式:数据在数据库中存储的模式
    • 内模式(存储模式 ):数据在计算机硬盘的存储模式

第二章 关系数据库

一、

  1. 关系数据库:所有关系(表)的集合。

  2. 关系数据库的型:关系数据库模式,对数据库的描述。

二、基本关系操作

  1. 查询操作:选择、投影、连接、并、交、差等。
    选择、投影、投影、并、差、笛卡尔积是5种基本操作】

  2. 数据更新:插入、删除、修改

三、实体完整性规则
若属性A是基本关系的主码,则属性A不能取空值
主键不允许存放空值,一张表只允许存在一个主键

四、参照性完整规则:
若属性F是基本关系表R的外码,它与基本关系表S主码相对应K相对应,则对于R中每个元组在F上的值必须为:空值或S中某个元组的主码值

四、关系代数
按运算符不同分为集合运算专门的关系运算在这里插入图片描述

集合运算


  1. 关系R和S具有相同的属性及域,它们的并运算将产生一个新关系,新关系具有和R,S相同的数据及域,新关系中包含R,S中所有元组(不重复)。记作:R ∪S在这里插入图片描述
    2.
    关系R和S具有相同的属性及域,它们的差运算将产生一个新关系,新关系具有和R,S相同的数据及域,新关系包含所有属于R但不属于S的元组。记作:R-S在这里插入图片描述

  2. 关系R和S具有相同的属性及域,它们的交运算将产生一个新关系,新关系具有和R,S相同的数据及域,新关系包含同时出现在R,S中的元组。记作:R ∩ S = R-(R-S)在这里插入图片描述
    笛卡尔积
    设关系R为n列,k1行,关系S为m列,k2行,则关系R和S的笛卡尔积,是R中每个元组和S中每个元组连接产生k1xk2行的新关系。记作:R×S在这里插入图片描述

相关标记:
在这里插入图片描述在这里插入图片描述在这里插入图片描述 在这里插入图片描述在这里插入图片描述在这里插入图片描述

专门的关系运算

  1. 选择
    选择操作符是根据某个条件从给定的关系中抽取指定的元组或行
    σ~Sdept= ‘IS’~(Student)
  2. 投影
    投影操作符是给定关系中抽取指定的属性和列。(避免重复行)
    πStuName,Sdept(Student)
  3. 连接
    从两个关系的笛卡尔积中选取属性满足一定条件的元组。
    常用的连接:
    (1)等值连接
    在这里插入图片描述
    (2)自然连接:特殊的等值连接,两个关系中进行比较的分量必须是相同属性组,在结果中把重复的属性列去掉在这里插入图片描述

悬浮元组:两个关系R和S在自然连接时,关系R和S中被舍弃的元组。

外连接以主表的每一行数据去匹配从表中的数据列,符合连接条件的数据将直接返回到结果集中,对那些不符合连接条件的列,将被填上NULL值后再返回到结果集中。【左外连接(只要左边表中的悬浮元组加入)、右外连接
在这里插入图片描述
在这里插入图片描述


  1. 给定关系R(X,Y)和S(Y,Z)。R中的Y和S中的Z可以有不同的属性名,但必须出自相同的域。
    R和S的除运算得到新关系P(X),P是R中满足条件的元组在X属性列上的投影:元组在X上分量值x的象集YX包含S在Y上投影的集合。记作R ÷ S

在这里插入图片描述
Ia1={(b1,c2),(b2,c3),(b2,c1)}
Ia2={(b3,c7),(b2,c3)}
Ia3={(b4,c6)}
Ia4={(b6,c6)}
看哪一个包含了S关系中的B、C投影,只有Ia1
【设R是学生表,S是选课表;R÷S可以查出选了所有课的学生】

第三章 关系数据库标准语言SQL

一、SQL:结构化查询语言。(只需要告诉我查什么,无需告诉我怎么查)

  1. 采用面向(元组)集合的操作方式
  2. 是独立的语言又是嵌入式语言(可嵌套到高级语言)
  3. 9个动词在这里插入图片描述
  4. 支持关系数据库三层模式:【外模式----视图、模式-------基本表、内模式------存储文件】在这里插入图片描述

二、模式定义与删除

  1. 定义模式
    CREATE SCHEMA<模式名> AUTHORIZATION<用户名>
    为用户A创建一个模式B(为某个用户A创建一个数据库B)
    【若未指定模式名,则模式名隐含为用户名】

CREATE SCHEMA中可以接受CREATE TABLE/VIEW/GRANT
在这里插入图片描述
为用户ZHANG创建一个TEST模式,并在模式下创建了一个TAB1表。

  1. 删除模式
    DROP SCHEMA <模式名> <CASCADE|RESTRICT>

CASCADE:级联。删除模式同时把该模式中所有的数据库对象全部删除。
RESTRICT:限制。若该模式中定义了下属的数据库对象(表、视图),则拒绝该删除语句执行。

三、表的定义、删除与修改

  1. 定义基本表
    CREATE TABLE <表名> (<列名><数据类型>[<列级完整性约束>][,<列名><数据类型><列级完整性约束>][<表级完整性约束>])

在这里插入图片描述
外键FOREIGN KEY(Sdept) REFERENCES COURSE(Sdept)
本表的Stdept要参照course表的sdept
多个主键PRIMARY KEY(Sno,Cno)

  1. 数据类型
    在这里插入图片描述
  2. 模式与表
    每个基本表都属于一个模式,一个模式包含多个基本表

创建基本表时,若没有指定模式,系统根据搜索路径来确定该对象所属模式。

  1. 显示当前搜索路径
    SHOW search_path;
  2. 搜索路径的当前默认值
    $user,PUBLIC
  3. 设置搜索路径
    SET search_path TO “模式名”,PUBLIC

表与模式的创建在这里插入图片描述在这里插入图片描述

  1. 修改基本表
    在这里插入图片描述

例子:

  1. ALTER TABLE Student ADD S_entrance DATE;
    【Student表中添加数据类型为DATE的S_entrance 属性】
  2. ALTER TABLE Student ALTER COLUMN Sage INT
    【修改Sage的数据类型为INT】
  3. ALTER TABLE Course ADD UNIQUE(Cname)
    【给Cname添加唯一性约束条件】
  1. 删除基本表
    DROP TABLE <表名>[<CASCADE|RESTRICT>]
    在这里插入图片描述

四、索引的建立与删除

  1. 建立索引的目的:加快查询速度

  2. DBMS一般会自动建立PRIMARY KEY和UNIQUE上的索引

  3. RDBMS(关系数据库系统)中索引一般采用B+树、HASH索引来实现;索引是关系数据库内部实现技术,属于内模式范畴。

  4. CREATE INDEX 语句定义索引时,可以定义为索引为唯一索引、非唯一索引或聚簇索引

  5. 建立索引
    CREATE [UNIQUE][CLUSTER] INDEX<索引名> ON <表名>(<列名[<次序>[,<列名[<次序>]]>)
    【UNIQUE:唯一索引;CLUSTER:聚簇索引】
    在这里插入图片描述在这里插入图片描述

  6. 删除索引
    DROP INDEX <索引名>;
    删除索引时,系统会从数据字典中删去有关该索引的描述。

  7. 数据字典
    关系数据库管理系统内部的一组系列表
    在这里插入图片描述

五、查询语句

  1. 语句格式
    在这里插入图片描述
  2. 单表查询
    在这里插入图片描述
  3. 查询经过机算的值
    在这里插入图片描述

例子:
在这里插入图片描述
在这里插入图片描述
使用别名:
在这里插入图片描述

  1. 选择表中的若干元组
    (1)消除取值重复的行:DISTINCT
    例子:
    (2)查询满足条件的元组:where
    在这里插入图片描述在这里插入图片描述

查询条件:

  1. 比较:=,<,>,<>,!>,!<
  2. 确定范围:BETWEEN AND,NOT BETWEEN AND
  3. 确定集合:IN,NOT IN
  4. 字符匹配:LIKE,IS NOT LIKE
  5. 空值:IS NULL,IS NOT NULL
  6. 多重条件:AND,OR,NOT

.
匹配串:【 _ :一个字符;%:任意长度字符】
查姓刘的学生:
SELECT * FROM Student WHERE NAME LIKE ‘刘%’
查姓刘的,名字为两个字的学生:
SELECT * FROM Student WHERE NAME LIKE '刘 _ ’
查第二个字为刘的学生
SELECT * FROM Student WHERE NAME LIKE ‘_刘%’
转义字符:
ESCAPE ''表示为转码字符在这里插入图片描述

  1. ORDER BY子句
    ASC:升序
    DESC:降序
    空值默认为最大值
    在这里插入图片描述

查询结果按Sdept升序排序,当Stept一致按Sage降序排序。
【ORDER BY A = ORDER BY A ASC】
这里是引用

  1. 聚集函数
    COUNT([DISTINCT|ALL]*) 统计元组个数
    COUNT([DISTINCT|ALL]<列名>) 统计一列中值的个数
    SUM([DISTINCT|ALL]<列名>) 机算该列值得总和
    WHERE子句中不能使用聚集函数作为条件表达式,只能用于SELECT 、GROUP BY和HAVING子句

在这里插入图片描述
WHERE AVG(age)>19 ==》错误

  1. GROUP BY
    在这里插入图片描述
    在这里插入图片描述

例子:这里是引用
GRUP BY子句分组后,可以使用HAVING短语指定筛选条件
在这里插入图片描述

  1. WHERE子句与HAVING短语区别
    (1)WHERE子句作用于基表或视图,从中选择满足条件得元组;HAVING短语作用于组,从中选择满足条件得组。
    (2)WHERE子句中不能使用聚集函数

查询平均成绩大于等于90分的学生学号和平均成绩
这里是引用

  1. 连接查询
    在这里插入图片描述
    格式二:
    [<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3>

例子:
1.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自身连接:一个表与自己进行连接
(1)需要给表起别名以示区别
(2)必须使用别名前缀

这里是引用
在这里插入图片描述

外连接

在这里插入图片描述

例子:
这里是引用

多表连接
在这里插入图片描述

例子:
在这里插入图片描述

  1. 嵌套查询
    SELECT-FROM-WHERE语句称为一个查询块。
    嵌套查询定义:将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件查询中
    在这里插入图片描述

例子:
1.
在这里插入图片描述
2. 查询与刘晨在同一系学习的学生
【带IN谓词的子查询】在这里插入图片描述

(1)不相关子查询:子查询的查询条件不依赖于父查询
(2)相关子查询:子查询的查询条件依赖于父查询

  1. 带有EXISTS的子查询

EXISTS谓词代表存在量词∃,带有EXISTS的子查询只返回true或false

例子:
在这里插入图片描述
在这里插入图片描述
【将Student逐行带到EXISTS后面的查询语句,存在满足的返回TRUE】

(1)使用存在量词EXISTS后,若内层嵌套查询结果非空,则外层Where子句返回TRUE;否则返回FALSE;
(2)EXISTS子查询目标列都用*,因为子查询只返回真值或者假值,给出列名无意义。
在这里插入图片描述

例子:
在这里插入图片描述


用EXISTS/NOT EXISTS实现全称量词∀
在这里插入图片描述

例子:
在这里插入图片描述

用EXISTS/NOT EXISTS实现逻辑蕴含

在这里插入图片描述

例子:
在这里插入图片描述

六、集合查询
集合操作的种类:并操作、交操作、差操作

  1. 并操作UNION
    在这里插入图片描述

  2. 交操作INTERSECT
    在这里插入图片描述

  3. 差操作EXCEPT
    在这里插入图片描述

  4. 基于派生表的查询
    在这里插入图片描述

例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、数据更新

  1. 插入数据
    INSERT INTO <表名> [(<属性列1>[,<属性列2>])] VALUES (<常量1>[,<常量2>])
    在这里插入图片描述

  2. 插入子查询结果
    INSERT INTO Dept_age(Sdept,Avg) SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept
    插入与查询属性类型要一致

  3. 修改数据
    UPDATE <表名> SET <列名>=<表达式>[,<列名>=<表达式>]…[WHERE <条件表达式>]
    【没有where默认表中所有元组都修改】
    带子查询的查询语句
    在这里插入图片描述

  4. 删除数据
    在这里插入图片描述

例子:
在这里插入图片描述

带子查询的删除语句
在这里插入图片描述

  1. 空值的处理
    在这里插入图片描述
    空值得判断:IS NULL/IS NOTNULL
    空值的约束条件:
    在这里插入图片描述空值的算术运算、比较运算和逻辑运算
    (1)空值与另一个值的算数运算结果为空值
    (2)空值与另一个值的比较运算结果为UNKOWN
    (3)逻辑运算
    在这里插入图片描述
    【T–TRUE、U----UNKOWN、F----FALSE】

七、视图

  1. 视图特点:
    (1)视图是虚表,从一个或几个基本表(或视图)导出。
    (2)只存放视图的定义,不存放视图对应的数据【不执行创建视图时的查询语句】。
    (3)表中的数据发生改变,视图中查询除的数据也会改变【动态】。
  2. 定义视图
    CREATE VIEW<视图>[(<列名>[,<列名>])] AS <子查询> [WITH CHECK OPTION]

【WITH CHECK OPTION:只可修改查询出来的数据或添加后会在视图中显示的数据】
在这里插入图片描述

例子:
在这里插入图片描述

  1. 基于多个基表的视图
    在这里插入图片描述基于试图的视图
    在这里插入图片描述
    带表达式的视图
    在这里插入图片描述分组视图
    在这里插入图片描述不指定属性列
    在这里插入图片描述【查询结果按列依次对应】

  2. 删除视图
    DROP VIEW <视图>[CASCADE]

  3. 查询视图
    在这里插入图片描述

这里是引用
在这里插入图片描述
在这里插入图片描述

  1. 视图的更新
    对试图的更新将通过视图消解 ,转为对实际表的更新操作。
    在这里插入图片描述
    【涉及到聚集函数、GROUP BY不可更新】

  2. 视图的作用:
    在这里插入图片描述

第四章 数据库安全性

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

二、数据库的不安全因素

  1. 非授权用户对数据库的恶意存取和破坏【措施:用户身份鉴别、存取控制和视图】
  2. 数据库中重要或敏感的数据被泄露【强制存取控制、数据加密存储和加密传输】
  3. 安全环境的脆弱性

三、非法使用数据库情况
在这里插入图片描述
四、用户身份鉴别

  1. 每个用户系统中都有一个用户标识,每次进入系统后,系统进行核对,通过鉴定后提供数据库管理系统的使用权限。

用户标识:由用户名和用户标识号组成,用户标识号在系统整个生命周期内唯一。【使用期间标识唯一】

  1. 用户身份鉴别的方法
    (1)静态口令鉴别【账户密码】
    (2)动态口令鉴别【验证码】
    (3)生物特征鉴别【指纹】
    (4)智能卡鉴别【门卡】

五、存取控制

  1. 用户权限定义合法权检查机制一起组成了数据库管理系统的存取控制子系统
  2. 常用存取控制方法:
    (1)自主存取控制:用户对不同数据对象有不同的存取权限,不同用户对象对同一数据也有不同权限,用户可将其拥有的存取权限转授给其他用户。【用户的角度去限制数据对象使用;用户权限=数据对象+操作类型】
    (2)强制存取控制:每一个数据对象被表以一定密级,每个用户被授予一定级别的许可证。【数据的角度去限制用户对象使用】

六、授权与回收

  1. GRANT对指定操作对象的指定操作权限授予指定的用户指定
    在这里插入图片描述(1)发出GRANT:数据库管理员、数据库对象创建者、拥有该权限的用户
    (2)接受权限的用户:一个或多个具体用户、PUBLIC(全体用户)
    (3)WITH GRANT OPTION:有,表示该权限可以再授予其他用户。
    (4)不允许循环授权

例子:
在这里插入图片描述
指定某列的授权
在这里插入图片描述

  1. REVOKE授权的权限可以由数据库管理员或其他授权者用REVOKE语句收回
    在这里插入图片描述

例子:
在这里插入图片描述
CASCADE:从U5处获取权限的权限也会被收回
在这里插入图片描述

  1. 创建数据库模式的权限
    在这里插入图片描述新创建的数据库用户有三种权限: CONNECT(默认)、RESOURCE和DBA

在这里插入图片描述

六、数据库角色

  1. 数据库角色是指被命名的一组与数据库操作相关的权限,角色是权限的集合。【授权操作简化为给予角色】

  2. SQL中首先用CREATE ROLE语句创建角色,然后用GRANT语句授权,用REVOKE收回授予角色的权限。
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

指定了WITH ADMIN OPTION则获得某种权限的角色或用户可以把这种权限授予其他角色。

例子:
在这里插入图片描述
在这里插入图片描述

七、强制存取控制方法

  1. 强制存取控制中实体分类
    (1)主体:主体是系统中的活动实体【用户、进程】
    (2)客体:客体是系统中的被动实体【受主体操纵的文件、视图、表、索引】

  2. 敏感度标记
    对于主体和客体,DBMS为它们每 个实例(值)指派一个敏感度标记(Label)。
    【主题敏感度:许可证级别;客体敏感度:密级

敏感度标记分类:绝密(TS)>机密(S)>可信( C )>公开( P)

  1. 强制存取控制规则
    (1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体。
    (2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能相应的客体。
  1. 强制存取控制(MAC) 是对数据本身进行密级标记,标记与数据是一个不可分的整体
  2. 实现强制存取控制时要首先实现自主存取控制
  3. 自主存取控制与强制存取控制共同构成数据库安全机制。
    在这里插入图片描述
    八、视图机制
  1. 视图作用:
    (1)把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一 定程度的安全保护。
    (2)间接地实现支持存取谓词的用户权限定义。【我只看到信息学院的数据,既我只能对信息学院的数据进行修改】

九、审计

  1. 什么是审计
    (1)审计目志(Audit Log) :启用一个专用的审计日志,用户对数据库的所有操作记录在上面。【耗费时间和空间】
    (2)审计员:审计员利用审计日志监控数据库中的各种行为,找出非法存取数据的人、时间和内容。

  2. 审计事件
    (1)服务器事件。(2)系统权限。(3)语句事件。(4)模式对象事件

  3. AUD IT语句和NOAUDIT语句
    AUDIT语句设置审计功能,NOAUDI语句取消审计功能

例子:
在这里插入图片描述

八、数据加密

  1. 数据加密包括存储加密和传输加密。

  2. 存储加密
    (1)透明存储加密【内核级加密保护(用户透明);写入磁盘加密,授权用户读取解密】
    (2)非透明加密【通过多个加密函数实现】

  3. 传输加密
    (1)链路加密(2)端到端加密

第五章 数据库的完整性

  1. 数据库的完整性:是指数据的正确性(现实性)和相容性(参照性)。

  2. 违约处理:
    数据库管理系统若发现用户的操作违背了完整性约束条件,就采取拒绝(NO ACTION) 执行该操作或级连(CASCADE) (一动则动全身)执行其他操作等方式保证完整性。

一、实体完整性

  1. 关系模型的实体完整性
    设置主码,让每条记录是相互可区分的,SQL中在CREATE TABLE中用PRIMARY KEY定义。
  2. 主码是单属性构成的有两种说明方法
    (1)定义为列级约束条件
    在这里插入图片描述
    (2)定义为表级约束条件【多属性主码时只能用表级】
    在这里插入图片描述

二、参照完整性

  1. 参照完整性定义:设置外键。在CREATE TABLE中用FOREIGN KEY定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码
  2. 违约处理
    在这里插入图片描述
    【被参照表:主键所在表;参照表:外键所在表】
    参照完整性违约处理规则:
    ①拒绝(NO ACTION) 执行。不允许该操作执行。(默认)
    ②级联(CASCADE) 操作,涉及到的都删除。
    ③设置为空值(SET-NULL),涉及到的都置为空值 除。

例子:
在这里插入图片描述
ON DELETE NO ACTION–拒绝

三、 用户完整性约束
用户定义的完整性:针对某一具体应用的数据必须满足的语义要求。【输入的数据在现实中得是合理的】

  1. 属性上约束条件的定义:
    CREATE TABLE时定义属性上的约束条件包括:列值非空(NOT NULL) 、列值唯一(UNIQUE) 、检查列值厂否满足一个条件表达式(CHECK)

在这里插入图片描述

  1. 属性上约束条件违约处理
    插入元组或修改属性的值时,关系数据库管理系统检查属性上的约束条件是否被满足,如果不满足则操作被拒绝执行

  2. 元组上约束条件的定义
    在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制。

在这里插入图片描述

  1. 元组上约束条件违约处理
    插入元组或修改属性的值时,关系数据库管理系统检查元组上的约束条件是否被满足,如果不满足则操作被拒绝执行

  2. 完整性约束命名子句
    在这里插入图片描述

例子:
在这里插入图片描述

  1. 修改表中的完整性限制
    使用ALTER TABLE语句修改表中的完整性限制。

这里是引用ALTER TABLE Student
ADD CONSTRAINT C1 CHECK (Sno BETWEEN 90 AND 99)
先删后加

四、域中的完整性约束

  1. SQL可以用CREATE DOMAIN语 句建立一个域以及域应该满足的完整性约束条件,然后用域定义属性。【改域,使用该域的属性的域都会变】

例子:
在这里插入图片描述
在这里插入图片描述

  1. 删除域的完整性约束条件
    在这里插入图片描述

五、断言

  1. 语句格式
    在这里插入图片描述
    WHERE 后面能加的都能成为CHECK子句

例子:
在这里插入图片描述

  1. 删除断言
    在这里插入图片描述

六、触发器

  1. 触发器(Trigger) 定义:触发器是用户定义在关系表上的一类由事件驱动的特殊过程。【事件发生—检查条件----触发动作】

①触发器保存在数据库服务器中。
②任何用户对表的增、删、改操作均由服务器自动激活相应的触发器。
③触发器可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力。

(1)表的拥有者才可以在表上创建触发器。
(2)同一模式下,触发器名必须是唯一的。
(3)触发器名和表名必须在同一模式下
(4)触发器只能定义在基本表上,不能定义在视图上。

  1. 语句格式在这里插入图片描述
    如果省略WHEN触发条件,则触发动作体在触发器激活后立即执行

  2. 触发事件
    ①INSERT、DELETE或UPDATE也可以是这几个事件的组合。
    ②UPDATE 0F<触发列,…,>即进一步指明修改哪些列时激活触发器。
    ③AFTER/BEFORE是触发的时机。
    AFTER表示在触发事件的操作执行之后激活触发器。
    BEFORE表示在触发事件的操作执行之前激活触发器。
    在这里插入图片描述

  3. 触发器类型
    级触发器(FOR EACH ROW)和语句级触发器(FOR EACH STATEMENT)

假设在A表创建一个AFTER触发器,触发事件是UPDATE语句。
当执行一条UPDATE语句后。若是级触发器,触发动作执行n次(A表有n行数据。);若是语句级触发器,触发动作执行一次

  1. 触发动作体
    ①触发动作体可以是一个匿名PL/SQL过程块,也可以是对已创建存储过程的调用。
    ②如果是级触发器,用户都可以在过程体中使用NEW和OLD引用事件之后的新值(改变之后的值)和事件之前的旧值
    ③如果是语句级触发器,则不能在触发动作体中使用NEW或OLD进行引用。
    ④如果触发动作体执行失败,激活触发器的事件就会终止执行,触发器的目标表或触发器可能影响的其他对象不发生任何变化

  2. 例子

在这里插入图片描述
在这里插入图片描述
【OLD row – 旧数据;NEW row—刚更改过的数据】
在这里插入图片描述
【NEW TABLE—数据更改后,刚更改过的新数据构成的表】
在这里插入图片描述

  1. 删除触发器
    在这里插入图片描述

第六章 关系数据库理论

一、

  1. 关系模式的表示
    关系模式由五部分组成,是一个五元组: R(U, D, DOM, F)。
    (1)关系名R
    (2) U为一组属性。
    (3) D为属性组U中的属性所来自的域。
    (4) DOM为属性到域的映射。【具体取哪个值】
    (5) F为属性组U上的一组数据依赖。
    在这里插入图片描述
    【所有的关系都有满足第一范式

  2. 数据依赖
    数据依赖是一个关系内部属性与属性之间的一种约束关系,是通过属性间值的相等与否体现出来的数据间相互联系。
    数据依赖的主要类型:
    (1)函数依赖【y=f(x)】
    (2)多值依赖

例子:
学生学号(Sno)函数决定学生名字(Sname),学生名字函数依赖于学生学号(Sname),记作:Sno–>Sname;

  1. 函数依赖存在的问题
    (1)数据冗余【同一数据重复存储】
    (2)更新异常【重复存储数据都要更改】
    (3)插入异常【某一重复数据依赖于记录存在,没有记录=数据信息没有存储】
    (4)删除异常【数据删除导致重要的重复数据丢失】
  2. 例子:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【避免一张表中有多个函数依赖】

二、规范式

  1. 函数依赖术语
    在这里插入图片描述

(Sno,Cno)---->Grade :非平凡的函数依赖
(Sno,Cno)---->Sno :平凡的函数依赖

在这里插入图片描述
在这里插入图片描述

  1. 完全函数依赖
    在这里插入图片描述
    【X中的元素缺一不可】
    若存在真子集X’可以函数决定Y,则为部分函数依赖,记作X–P—>Y

例子:
在这里插入图片描述

  1. 传递函数依赖
    在这里插入图片描述


  2. 在这里插入图片描述在这里插入图片描述
    (1)候选码是最小的超码,即K的任意一 个真子集都不是候选码。
    (2)若关系模式R有多个候选码,则选定其中的一个做为主码【主码的扩展==超码】
    (3)整个属性组是码,称为全码
    (4)【主码与外部码一起提供了表示关系间联系的手段】在这里插入图片描述

三、 范式

  1. 范式是符合某一种级别的关系模式的集合。

  2. 范式的分类:
    在这里插入图片描述
    在这里插入图片描述

  3. 规范化:是指一个低一级范式的关系模式,通过模式分解转换为若干个高一级范式的关系模式集合的过程。
    在这里插入图片描述

  4. 2NF(第二范式)
    定义:若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈ 2NF。
    【给定一个候选码,可以确定一个非主属性】> 例子:

在这里插入图片描述
【Sno:学号;Sdept:专业;Sloc:住宿区;Cno:课程号;Grade:成绩。】
该关系属于第二范式。Stdept、Sloc部分函数依赖于候选码(Sno,Cno)
.

  1. 不属于2NF,存在的问题:
    在这里插入图片描述
  2. 解决方法
    把Sdept和Sloc分解出来
    在这里插入图片描述
    在这里插入图片描述
    俩个表都满足2NF
  1. 3NF(第三范式)
    在这里插入图片描述
    每一非主属性都不传递依赖于候选码,则关系模式为第三范式。】

例子:
1.
在这里插入图片描述
Sloc传递依赖于Sno,S-L不满足3NF。
SC没有传递依赖满足3NF
2. 解决办法
在这里插入图片描述

  1. BCNF(第三范式的扩充 )
    在这里插入图片描述
    在3NF的基础上加上只有候选码才能推出其他属性。
    【含有候选码即可】
    BCNF 的关系模式所具有的性质
    在这里插入图片描述
    【(1)候选码可以唯一确定一组非主属性;(2)非主码的候选码可以唯一确定一组主属性;(3)非主属性不能唯一确定任何一个属性】

例子:
1.
在这里插入图片描述
【两组候选码,(S,J)、(J,P)】
在这里插入图片描述
2.

在这里插入图片描述
不存在非主属性传递依赖或部分依赖,所以属于3NF
在这里插入图片描述
【(S,T)–>J与T–>J不是部分依赖,部分依赖要球J得是非主属性】
解决:STJ分解为(S,T)与(T,J),他们都是BCNF

  1. 多值依赖
    在这里插入图片描述【X–>Y:任选取两行s、t,s[X]=t[X],交换s[Y]和t[Y]后新元组任在原关系表中】
    【我的理解:对某一特定的X分量对应的Y分量的集合,某一特定的X分量对应的Z分量的集合,Y分量集合可以对应Z分量集合中的任何一个分量】

在这里插入图片描述

这里是引用
在这里插入图片描述
Teaching具有唯一码(C,T,B),既全码

在这里插入图片描述
在这里插入图片描述

例子2:
1.
在这里插入图片描述
2.
在这里插入图片描述
3.
在这里插入图片描述

多值依赖的性质:
在这里插入图片描述

  1. 4NF
    在这里插入图片描述
    在这里插入图片描述

  2. 数据依赖的公理系统
    在这里插入图片描述 Armstrong公理系统:是一套推理规则,是模式分解算法的理论基础。主要用于求给定关系模式的码,从一组函数依赖求得蕴涵的函数依赖。【Armstrong公理系统是有效的、完备的。

在这里插入图片描述

  1. A1自反律
    若Y⊆X⊆U,则X→Y为F所蕴涵。(平凡的函数依赖)
  2. A2增广律:
    若X→Y为F所蕴涵,且Z⊆U,则XZ→YZ为F所蕴涵。
  3. A3传递律
    若X→Y巧Y→Z为F所蕴涵,则X→Z为F所蕴涵。
  4. 合并规则
    由X→Y,X→Z,有X→YZ。
  5. 伪传递规则 :
    由X→Y,WY→Z,有XW→Z。
  6. 分解规则 :
    由X→Y及Z⊆Y,有X→Z。
  7. 根据合并规则和分解规则,可得:
    [引理1] X→A1A2…Ak成立的充分必要条件是X→Ai成立(i=1,2,…k)

在这里插入图片描述
闭包:由一组属性直接或间接推导出的所有属性的集合
在这里插入图片描述
在这里插入图片描述

  1. 【算法1】求属性集X (X⊆U) 关于U上的函数依赖集F的闭包XF+。、
    输入: X, F . 输出: XF+
    步骤:
    ①令X(0)=X。i=0。【初始状态】
    ②求B,这里B= {A| (彐V) (彐W)(V→W∈F且V∈X(i) 且A∈W) 【由输入的集合根据F可推导的属性】
    ③X(i+1)=BUX(i)【新状态】
    ④判断X(i+1)=X(i)
    ⑤若X(i+1)与X(i)相等或X(i)=U,则x(i)就是XF+,算法终止
    ⑥若否,则i=i+1, 返回第②步。

例子
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

【(2)、(3):缺它不可】
在这里插入图片描述

二、模式的分解

  1. 模式分解:
    在这里插入图片描述

  2. 函数依赖的分解在这里插入图片描述

  3. 模式分解的三个定义
    分解后产生的模式应与原模式等价。

等价:

  1. 分解具有无损连接性。
  2. 分解要保持函数依赖。
  3. 分解既要保持函数依赖,又要具有无损连接性。

判别一个分解的无损连接性:
在这里插入图片描述
在这里插入图片描述

例子:
在这里插入图片描述
【第一行R1,R1(U)存在A、B、C,则表都填入a列号;无D、E填入b行号,列号
在这里插入图片描述
【每个函数依赖依次检测,先找存在函数左部的属性的行,将函数右部对应的属性列改为a】

  1. 模式分解的算法

关于模式分解的几个重要事实:

  1. 若要求分解保持函数依赖,那么模式分解总可以达到3NF,但不一定能达到BCNF;
  2. 若要求分解既保持函数依赖,又具有无损连接性,可以达到3NF,但不一定能达到BCNF;
  3. 若要求分解具有无损连接性,那一定可达到4NF

(1)合成法
在这里插入图片描述

例子:
在这里插入图片描述

(2)转换为3NF既有无损连接性又保持函数依赖的分解
在这里插入图片描述

例子:
在这里插入图片描述

(3)分解法
在这里插入图片描述

相关引理:
在这里插入图片描述

(4)达到4NF的具有无损连接性的分解
在这里插入图片描述

这里是引用
在这里插入图片描述

第六章 数据库设计

一、数据库设计方法

  1. 规范化设计基本思想
    过程迭代和逐步求精
    在这里插入图片描述

  2. 数据库的基本步骤
    需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
三级模式,二级映射

  1. 数字字典
    数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述。是一种用户可以访问的记录数据库和应用程序元数据(描述数据属性的信息)的目录。

数据字典的内容:数据项、数据结构、数据流、数据存储、处理过程。

  1. 实体间联系
    (1)两个实体之间的联系:
    在这里插入图片描述(2)两个以上实体型之间的联系
    两个以上的实体型之间也存在着一对一、一对多、多对多联系。
    > 一对多:
    (3) 单个实体型内的联系
    【职工由其中的一个人领导,一个领导可以领导若干名员工】
    在这里插入图片描述
    联系的度:参与联系的实体型的数目。
    在这里插入图片描述

二、 E-R图向关系模型的转换

  1. E-R图由实体型、实体的属性和实体型之间的联系三个要素组成。
  2. 转换原则
    (1)一个实体型转换为一个关系模式。关系的属性为实体的属性,关系的码为实体的码
  3. 联系的转换:
    (1)一个1: 1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
  1. 转换为一个独立的关系模式
    关系的属性:与该联系相连的各实体的码及联系本身的属性
    关系的候选码:每个实体的码均是该关系的候选码。

在这里插入图片描述
独立模式:R1(Sdept)、R(Sdept、Sno、人数)、R(Sno)

  1. 与某一端实体对应的关系模式合并
    合并后关系的属性:加入对应关系的码和联系本身的属性。
    合并后关系的码:不变。

在这里插入图片描述
合并模式:R1(Sdept、Sno(加入的主码)、人数(联系属性)) 、R2(Sno)

(2)一个1: n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并

(3)一个m: n联系转换为一个关系模式
(4)三个或三个以上实体间的一个多元联系转换为一个关系模式。
(5)具有相同码的关系模式可合并。

  1. 例子:

这里是引用
在这里插入图片描述

  1. 设计用户子模式
    (1)
    在这里插入图片描述(2)
    在这里插入图片描述(3)在这里插入图片描述

三、物理结构设计

  1. 存取方法:
    在这里插入图片描述
  1. B+树索引存取方法的选择
    选择索引存取方法实际上就是根据应用要求确定对哪些属性列建立索引、对哪些属性列建立组合索引、对哪些索引要设计为唯一索引等。【建立在(一组)属性列上】
  2. Hash存取方法的选择
    在这里插入图片描述
  3. 聚簇存取方法的选择
    具有相同值的元组集中存放在连续的物理块中在这里插入图片描述
  1. 数据库的
    (1)重组织:按原设计要求重新安排存储位置、回收垃圾、减少指针链【不会改变原有数据的逻辑结构和物理结构】
    (2)重构造:根据新环境调整数据库的模式和内模式

第八章 数据库编程

SQL编程语言技术可以有效克服SQL语言实现复杂应用方面的不足,提高应用系统和数据库管理系统间的互操作性。

一、嵌入式SQL

  1. 主语言
    嵌入式SQL是将SQL语句嵌入程序设计语言中,被嵌入的程序设计语言,如C、C++、 Java, 称为宿主语言, 简称主语言。
  2. 嵌入式SQL前缀
    为了区分SQL语句与主语言语句,所有SQL语句
    必须加前缀。

例子:这里是引用

  1. 嵌入式SQL处理过程:预编译
    在这里插入图片描述

  2. 入式SQL语句与主语言之间的通信
    SQL语句负责操纵数据库,高级语言语句负责控制逻辑流程。
    在这里插入图片描述

  1. SQL通信区
    定义SQLCA格式:
    EXEC SQL INCLUDE SQLCA;
    在这里插入图片描述
  2. 主变量
    输入主变量:由应用程序对其赋值,SQL 语句引用。
    输出主变量:由SQL语句对其赋值或设置状态信息,返回应用程序。
    指示变量:整型变量,一个主变量可以带一个指示变量,用来指示所指主变量的值或条件
    【查询结果为NULL,指示变量设置为负值;当指示变量为负值,主变量都会被习题认为NULL】
    在这里插入图片描述
  3. 说明:
    在这里插入图片描述
    【主变量在SQL的SQL语句中中要加冒号,主程序中不需要】
  4. 游标:
    SQL语言是面向集合的,一条SQL语句原则,上可以产生或处理多条记录。主语言是面向记录的,一组主变量一次只能存放一 条记录。
    在这里插入图片描述
    【游标指着当前查询结果的某一条记录,通过移动游标来获取相应的数据】

不用游标的SQL语句:
在这里插入图片描述
使用游标的SQL语句:
在这里插入图片描述

说明游标:
在这里插入图片描述
【打开游标时才会执行SELECT语句】
在这里插入图片描述
【一次只能推进一个】
在这里插入图片描述

  1. 建立和关闭数据库连接
    (1)建立数据库连接
    格式: EXEC SQL CONNECT T0 target [AS connection-name] [USER user-name] ;

在这里插入图片描述

(2)关闭数据库连接
格式: EXEC SQL DISCONNECT [connection] ;

例子:编写一个C语言程序用于交互式更新某些学生年龄
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 动态SQL
    在程序运行过程中可临时"组装"SQL语句,支持动态组装SQL语句动态参数两种形式。

静态SQL:SQL语句中查询条件固定不变

动态SQL语句主变量:
程序主变量包含的内容是SQL语句的内容,而不是原来保存数据的输入或输出变量,

例子:
在这里插入图片描述

动态参数:
动态参数是SQL语句中的可变元素,使用参数符号?表示该位置的数据在运行时设定。

与主变量不同动态参数的输入不是编译时完成绑定,而是通过PREPARE语句准备主变量和执行语句EXECUTE绑定数据或主变量来完成。

在这里插入图片描述
在这里插入图片描述
【sql语句在使用时才会定义,里面的参数也是使用时动态赋值】
.
例子:
在这里插入图片描述
【向表中插入100】

二、过程化SQL
嵌入式SQL依赖于两种语言,过程化SQL建立子集的逻辑语言(IF ELSE…);

  1. 块结构
    过程化SQL是SQL的扩展,增加了过程化语句功能,基本结构是块,每个块完成一个逻辑操作,块之间可以互相嵌套。
  1. 定义部分
    在这里插入图片描述
  2. 执行部分
    在这里插入图片描述
  1. 变量和常量的定义:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 流程控制
    (1)条件控制语句
    在这里插入图片描述
    在这里插入图片描述(2)循环控制语句
    在这里插入图片描述
    【要在循环执行语句中设置退出循环的语句。】在这里插入图片描述在这里插入图片描述
    (3)错误处理
    在这里插入图片描述

三、存储过程和函数

  1. 过程化SQL块分为匿名块和命名块两类。

在这里插入图片描述

  1. 存储过程:
    由过程化SQL语句书写的过程,经编译和优化后存储在数据库服务器中,使用时只要调用即可。
    在这里插入图片描述

例子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
调用在这里插入图片描述

在这里插入图片描述
【过程中可以调用其他过程】

在这里插入图片描述
3. 函数
【函数必须指定返回类型,过程不用】
在这里插入图片描述在这里插入图片描述

  1. 过程化的游标
    在这里插入图片描述

例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、ODBC编程
使用ODBC编写的应用程序可移植性好,能同时访问不同的数据库共享多个数据资源。【跨平台】

  1. ODBC应用系统的体系结构
    在这里插入图片描述

ODBC通过驱动程序来提供应用系统与数据库平台的独立性,ODBC应用程序不能直接存取数据库,各种操作由驱动程序提交给DBMS的ODBC驱动程序,调用驱动程序支持的函数来存取数据库。

  1. ODBC数据源管理
    在这里插入图片描述

这里是引用
例子:
在这里插入图片描述

第九章 关系查询处理和查询优化

一、关系数据库系统的查询处理

  1. 查询处理步骤
    (1)查询分析:对查询语句进行扫描、词法分析和语法分析【保证语法正确】
    (2)查询检查:合法性检查or视图转换or安全性和完整性检查【能不能查得到】
    (3)查询优化:代数优化(逻辑优化)、物理优化
    (4)查询执行。
    在这里插入图片描述

  2. 选择操作的典型实现
    (1)全表扫描法
    在这里插入图片描述
    (2)索引扫描法
    在这里插入图片描述
    【B+树索引、Hash索引】
    在这里插入图片描述【两个索引条件:(1)分别按索引查到两个表,取交集(2)先按索引找到一个表,在按另一条件进行查找】

  3. 连接操作的实现
    (1)嵌套循环算法【暴力】
    (2)排序-合并算法【排序优化】
    (3)索引连接
    (4)Hash Join算法
    在这里插入图片描述

二、关系数据库系统的查询优化

  1. 查询优化是系统的事,用户不用考虑如何最好的表达查询以获得较好的效率
    在这里插入图片描述
    【I/O操作涉及机械动作比较耗时,所以在计算查询代价时一般用查询处理读写的块数作为衡量单位。】

  2. 一个实例

  1. .
    在这里插入图片描述
  2. .
    在这里插入图片描述
    【笛卡尔乘积:生成107条记录,在进行搜索;(内存不够,I/O次数很大)
    自然连接:生成10000条记录,在进行搜索;(内存相比笛卡尔乘积I/O次数小很多)
    Q3:先找到50条记录,在进行自然连接,生成50条记录在进行搜索(内存I/O次数大大减小)】
  3. 先做选择,在做连接会好一些。
    有选择和连接操作时,先做选择操作,这样参加连接的元组就可以大大减少,这是代数优化。

三、代数优化

  1. 代数优化策略是通过对关系代数表达式的等价变换来提高查询效率。
  2. 等价变换规则
    (1)连接、笛卡尔积交换律
    在这里插入图片描述(2)连接、笛卡尔积结合律
    在这里插入图片描述(3) 投影的串接律
    在这里插入图片描述(4)选择的串接律
    在这里插入图片描述(5)选择与投影操作的交换律
    在这里插入图片描述(6)选择与笛卡尔积的交换律
    在这里插入图片描述
    (7)选择与并的分配律
    在这里插入图片描述(8)选择与差运算的分配律
    在这里插入图片描述(9)选择对自然连接的分配律
    在这里插入图片描述(10)投影与笛卡尔积的分配律
    在这里插入图片描述

(11)投影与并的分配律

在这里插入图片描述

  1. 查询树的启发优化
    (1)选择运算应尽可能先做
    (2)把投影运算和选择运算同时进行
    (3)把投影同其前或其后的双目运算结合起来,没有必要为了去掉某些字段而扫描一遍关系。【先投影,在进行双目运算】
    (4)把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算。
    (5)找出公共子表达式

优化表达式算法:
在这里插入图片描述
方法:
(1)在这里插入图片描述
【逐渐减少关系长度】
(2)
对每一个选择,利用等价变换规则4~9尽可能把它移的叶端。【选择先开始执行】
(3)
对每一个投影利用等价变换规则3,5,10,11中的一般形式尽可能把它移向树的叶端。【投影先开始执行】
(4)在这里插入图片描述
(5)
把上述得到的语法树的内节点分组
在这里插入图片描述
在这里插入图片描述

例子:

  1. .
    在这里插入图片描述
  2. .
    在这里插入图片描述
  3. .
    在这里插入图片描述

四、物理优化(66)
物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划。

第十章 数据库恢复技术

一、事务的基本概念

  1. 事务
    用户定义的一个数据库操作序列(这些操作要么全都做,要么都不做),是一个不可分割的工作单位,是数据恢复和并发控制的基本单位

  2. 事务的定义
    在这里插入图片描述
    【事务正常结束,提交事务所有操作】
    在这里插入图片描述
    【事务异常终止,事务回滚到开始状态】

  3. 事务的特性
    (1)原子性:
    数据恢复和并发控制的基本单位
    (2)一致性:
    数据库中只包含成功事务提交的结果。
    (3)隔离性:
    一个事务的执行不能被其他事务干扰。
    (4)持续性
    一个事务一旦提交,数据库中数据的改变就应该是永久性的。

破坏特性的原因:

  1. 多个事务并行运行时,不同事务的操作交叉执行
  2. 事务在运行过程中被强行停止

二、数据库恢复
数据库恢复的作用:
把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能。

三、故障的种类:

  1. 事务内部的故障
    在这里插入图片描述
    在这里插入图片描述【事务可能执行到一半就得回滚】

  2. 系统故障

表现一:
发生系统故障时,一些尚未完成的事务的结果可能已送入物理数据库,造成数据库可能处于不正确状态。
恢复策略:
系统重新启动时,恢复程序让所有非正事务回滚,强行撤消(UNDO) 所有未完成事务。
表现二:
发生系统故障时,有些已完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中,系统故障使得这些事务对数据库的修改部分或全部丢失。
恢复策略:
系统重新启动时,恢复程序需要重做已提交的事务。

  1. 介质故障
    硬故障,外存故障。会破坏数据库数据
  2. 计算机病毒

四、恢复的实现技术

  1. 恢复机制涉及的关键问题是如何建立冗余数据、如何利用这些冗余数据实施数据库恢复。
    建立冗余数据方法:(1)数据转储(2)日志文件

  2. 数据转储
    数据转储是指数据库管理员定期地将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程。这些备用的数据文本称为后备副本(backup) 或后援副本
    在这里插入图片描述

  3. 转储方法
    (1)静态转储:
    在系统中无运行事务时进行的转储操作。【期间不允许对数据库有任何操作】
    (2)动态转储:
    转储操作与用户事务并发进行【转储期间允许对数据库进行存取或修改。】
    (3)海量转储与增量转储:
    在这里插入图片描述

  4. 日志文件
    日志文件是用来记录事务对数据库的更新操作的文件【登记日志文件要遵循时间次序;先登记日志文件再写数据库】
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

五、恢复策略

  1. 事务故障的恢复:
    回滚撤销
    在这里插入图片描述
    在这里插入图片描述

  2. 系统故障:
    【UNDO—撤销;REDO—重做】
    在这里插入图片描述

  3. 介质故障
    . 载入日志文件副本,重做已完成的事务
    在这里插入图片描述

六、带有检查点的恢复技术

  1. 存在问题:搜索整个日志耗费大量时间,重做处理浪费时间。
    在这里插入图片描述

  2. 检查点技术
    在这里插入图片描述

例子:
在这里插入图片描述
【重新开始文件存储检查点地址,通过地址指向日志文件检查点记录;检查点记录:记录了在生成该检查点时运行的事务(T–事务,D–事务开始的地址)】

在这里插入图片描述在这里插入图片描述【检查点建立之前的事务不需要重做;检查点之后,系统故障之前完成的事务重做,故障之后完成的事务撤销】

七、数据库镜像

  1. 为了预防介质故障,提出了数据库镜像。
  2. 数据库镜像
    在这里插入图片描述【数据库系统同时写主数据库与镜像数据库。(可以负载均衡)】
    出现故障,可以访问镜像数据库,同时恢复主数据库在这里插入图片描述

第十一章 并发控制

一、并发控制概述

  1. 多用户数据库系统:
    多个用户同时使用的数据库系统。
    在这里插入图片描述
  2. 多事务执行方式
    (1)事务串行执行【单处理机】
    (2)交叉并发方式【单处理机,哪个部件空闲去用哪个】
    (3)同时并发方式【多处理机】【本章讨论的是 单处理机下的并发】
  3. 数据不一致性
    (1)丢失修改
    在这里插入图片描述【应该减2的A,最后只减了1】
    (2)不可重复读
    不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。

不可重复读包括三种情况:
(1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值。
(2)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘地消失了。
(3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。
【(2)、(3):幻影现象】

二、封锁

  1. 什么是封锁
    封锁就是事务T在对某个数据对象( 例如表、记录等)操作之前,先向系统发出请求,对其加锁,加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
  2. 基本封锁类型:排他锁共享锁
    (1)排他锁:
    对A上锁后,其他事务不能对A进行加锁和修改也不可读取
    (2)共享锁:
    共享锁又称为读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。【只可读,不可改】

在这里插入图片描述
【S–共享锁、X–排他锁】

三、封锁协议
封锁协议是指在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议,例如何时申请X锁或S锁、持锁时间、何时释放等。

  1. 一级封锁协议
    一级封锁协议是指事务T在修改数据R之前必须先对其加X锁直到事务结束才释放;事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。
    【一级封锁:可防止丢失修改,保证事务T可恢复;不能保证可重复读和不读脏数据(读数据不用加锁)】

例子:
解决丢失修改
在这里插入图片描述

  1. 二级封锁协议:
    二级封锁协议是一级封锁协议加上事务T在读取数据R之前必须先对其加S锁读完后即可释放S锁
    【可防止丢失修改和读脏数据;不能保证可重复读】

例子:
在这里插入图片描述

  1. 三级封锁协议
    三级封锁协议是一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放
    【二级读完就释放,本事务后面想验证可能事务就会被修改】

例子:

在这里插入图片描述

在这里插入图片描述

四、活锁和死锁

  1. 活锁
    某一事务在等待上锁权限,但一直被其他事务抢占,永远处于等待状态。
    在这里插入图片描述【避免活锁:(1)先来先服务(2)优先级算法】

  2. 死锁
    与操作系统死锁一样。两个事务在互相等待对方释放上锁权限。
    在这里插入图片描述【解决死锁:死锁的预防和死锁的诊断与解除】

  1. 死锁预防
    一次封锁法
    要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。【一次性全部上锁】
    在这里插入图片描述
    顺序封锁法
    预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。【先封锁排在前面的数据对象,才能封锁后面的数据对象】
  2. 死锁的诊断与解除
    (1)超时法
    如果事务的等待时间超过了规定的时限,就认为发生了死锁
    (2)等待图法
    在这里插入图片描述
    【图中存在回路(循环等待)–>死锁】
    选择一个处理死锁代价最小的事务进行撤销

五、并发调度的可串行性
串行调度是正确的,执行结果等价于串行调度的调度也是正确的

  1. 可串行化调度:
    多个事务并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同

  2. 冲突可串行化调度
    在这里插入图片描述【(1)Ri(x)与Rj(x)不是冲突操作;(2)==同一事务的两个操作不同事物的冲突操作==是不能变换的】

一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc’,如果Sc’是串行的,称调度Sc是冲突可串行化的调度

例子:
在这里插入图片描述
冲突可串行化调度是可串行化调度的充分条件,但不是必要条件。还有不满足冲突可串行化条件的可串行化调度。
【能冲突可串行化的调度一定是正确的,正确的调度不一定可冲突串行化】
例子:
在这里插入图片描述

六、两段锁协议

  1. 两段锁协议定义:
    指所有事务必须分两个阶段对数据项加锁和解锁,即在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁;在释放一个封锁之后,事务不再申请和获得任何其他封锁。
  2. 两段锁的含义:事务分为两个阶段
    (1)第一阶段是获得封锁,也称为扩展阶段。事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁
    (2)第二阶段是释放封锁,也称为收缩阶段。事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁

例子:
在这里插入图片描述
在这里插入图片描述
遵循两段锁协议的调度一定是可串行化调度
在这里插入图片描述

七、封锁的粒度

  1. 封锁对象的大小:封锁粒度
    封锁对象:逻辑单元(属性值、属性值集合、元组、关系1、索引),物理单元(页、物理记录)
  1. 封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小系统开销也越小
  2. 封锁的粒度越小,并发度较高,但系统开销也就越大
  1. 多粒度封锁:
    是指在一个系统中同时支持多种封锁粒度供不同的事务选择。
  2. 多粒度树
    以树形结构来表示多级封锁粒度,根结点是整个数据库,表示最大的数据粒度,叶结点表示最小的数据粒度。
    在这里插入图片描述
  3. 多粒度封锁协议
    允许多粒度树中的每个结点被独立地加锁,对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁。【关系被加锁,关系里的所有元组也被加锁了】
  1. 显式封锁:
    直接加到数据对象上的封锁。
  2. 隐式封锁:
    是该数据对象没有独立加锁,是由其上级结点加锁而使该数据对象加上了锁。

在这里插入图片描述

  1. 意向锁
    在这里插入图片描述意向锁的含义:
    如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁。对任一结点加基本锁,必须先对它的上层结点加意向锁。【元组加锁,要对元组所在关系加锁,还要对元组所在数据库加锁】

常用意向锁:

  1. 意向共享锁(IS锁)
    在这里插入图片描述
    【对某一元组加锁,得对其所在数据库和关系加IS锁】
  2. 意向排它锁(IX锁)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 共享意向排它锁(SIX锁)
    在这里插入图片描述

在这里插入图片描述

7…
在这里插入图片描述在这里插入图片描述

八、其他并发控制机制

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值