数据库系统概论复习笔记总结

数据库系统概论

一、认识数据库

基本概念

  • 数据(data) =》 仓库中的物品
    • 存储基本对象
    • 类型、定义
  • 数据库(DB) =》 仓库
    • 有组织、可共享的数据集合
  • 数据库管理系统(DBMS) =》 仓库管理员
    • 用户与操作系统之间的数据管理软件
    • 统一管理用户的数据访问
  • **数据库系统(DBS) =》 服务部门 **
    • 引入数据库技术后的计算机系统
    • 由数据库、数据库管理系统、应用程序、用户组成

数据管理技术发展阶段

  1. 人工管理阶段
    • 批处理
  2. 文件系统阶段
    • +联机实时处理
  3. 数据库系统阶段
    • +分布处理
    • 优点
      • 数据结构化(本质区别)
      • 共享性高、冗余度低、易扩充
      • 独立性高
      • 统一管理和控制
        • 数据的安全性保护
        • 数据的完整性检查
        • 并发控制
        • 数据库恢复
    • 以加工数据的程序为中心转向围绕共享的数据库为中心

⭐数据模型

现实世界 =》 信息世界(概念模型) =》 机器世界(数据模型 = 逻辑模型 + 物理模型)

  • 概念模型(信息模型):用户的观点来对数据和信息进行建模

    • 实体

    • 属性

    • 实体型

    • 实体集

    • 联系

    • 实体-联系方法(ER模型)

      • 两个实体型之间的关系:1对1,1对n,m对n

      • 两个以上实体型之间的关系

      数据库系统概论复习笔记总结_第1张图片

  • 数据模型

    • 三要素:数据结构 + 数据操作 + 数据的完整性约束
    • 逻辑模型:数据库的逻辑结构
      • 层次模型(树状,只有一个父节点)
      • 网状模型(可以有多个双亲)
      • 关系模型(关系表)
    • 物理模型:数据在磁盘上的存储方法和方式

两级抽象

  1. 客观对象 =》 概念模型(数据库设计人员)
  2. 概念模型 =》 物理模型(DBMS)
  • 实体内部的联系 =》 实体各属性间的联系
  • 实体之间的联系 =》 不同实体集间的联系

⭐数据库系统三级模式和两级映像

三级模式:模式 + 外模式 + 内模式

数据库系统概论复习笔记总结_第2张图片

  • 二级映像和数据独立性
    • 外模式/模式映像
      • 模式改变时,可以只改变映像可以不改变外模式和应用程序 =》 逻辑独立性
    • 模式/内模式映像
      • 存储结构改变时,改变映像可以不改变应用程序 =》 物理独立性
  • 外模式(子模式/用户模式)
    • 用户眼中的逻辑结构和特征描述,用户的数据视图
      • 视图是子模式及子模式到模式的映像
    • 不同类型用户有不同的数据视图,而一般是总模式的子集,这样就能保证数据的安全性
    • 外模式数据定义语言(外模式DDL)
  • 模式(schema:逻辑模式)
    • 全体数据的逻辑结构和特征描述
    • 所有用户的公共数据视图,一个数据库只有一个模式
    • 模式数据定义语言(模式DDL)
  • 内模式(存储模式)
    • 数据物理结构和存储方式的描述
    • 堆存储/升降序/聚簇存储/B+树索引/hash索引/压缩/加密等
    • 一个数据库只有一个内模式

二、关系模型

  • 关系 =》 表
  • 元组 =》 一行
  • 分量 =》 属性值
  • 关系模式 =》表和值的关系

数据操作都是集合操作,操作对象和操作结果都是关系(元组的集合),存取路径对用户屏蔽

关系的三种类型

  • 基本表
  • 查询表
  • 视图表

基本关系性质

  • 列同质
  • 行、列顺序无所谓
  • 候选码唯一
  • 分量必须取原子值

相关定义

  • 元组:笛卡尔积中的元素
  • 分量:笛卡尔积元素的值
  • 关系:总体集合的子集
    • 目/度:元组的个数(几个属性)
    • 候选码:元组的唯一标识
      • 候选码中的属性为主属性,其余为非主属性/非码属性
      • 候选码不能同值,唯一
    • 主码:多个候选码 =》 选一个做主码
    • 全码:所有属性组共同组成的候选码

⭐关系完整性约束

  • 实体完整性
    • 主属性 =》唯一非空
  • 参照完整性
    • 若外码对应主码 =》 =null/主码值
  • 用户定义的完整性
    • 自定义的域所设计数据要满足语义要求

关系代数语言

基本操作:选择、投影、并、差、笛卡尔积

  • 并、交、差

    • 要求两者结构相同
  • 笛卡尔积

    • 全连接
  • 选择

    • 限制条件
  • 投影

    • 取单个属性
  • 连接

    • 等值连接
      • 某值相等,以该值连接(该值有几列保持几列)
    • 非等值连接
      • 与等值连接类似,不过是比较
    • 自然连接
      • 把等值连接重复的列去掉
      • 没有相同列的等值连接就是笛卡尔积
  • 数据库系统概论复习笔记总结_第3张图片

三、SQL语言

SQL概述

SQL : 数据定义语言(DDL) + 数据操纵语言(DML) + 数据控制语言(DCL)

⭐数据定义

  • 模式(架构)的定义

    • 架构:包含基本表、视图、索引等,是对象的容器

    • 独立于用户的非重复命名空间

    • -- 创建数据库
      create database myDB
      
      -- 创建架构
      use myDB
      create Schema mySchema
      
      -- 删除架构
      drop Schema mySchema cascade
      -- CASCADE 级联删除,把机构中的对象都删掉
      -- RESTRICT 如果架构中有对象拒绝删除
      
  • 基本表的定义

    • -- 创建
      create table student
      (	sno char(10) primary key,
       	sname varchar(10) unique,
      	ssex char(2) check(ssex in ('男','女')),
       	sage smallint ,sdept char(20)
      );
      -- 修改
      alter table student add s_entrance date;
      alter table student alter column sage int;
      alter table student constraint unique(cname);
      
      -- 删除
      drop student restrict/cascade
      
    • unique 唯一

    • primary key 主码

    • check 用户自定义

  • 索引的定义

    • 索引:用于加快查询速度

      • DBA或建表人可以建立索引
      • DBMS会自动给主码和唯一建立索引
    • -- 创建sname对应的名为stname的索引
      create unique index stname on student(sname)
      -- 删除sc对应的名为scno的索引
      drop index scno on sc
      
  • 视图的定义

    • create View V_student_BYear as 
      					select sno,sname,ssex,year(getdate()) - Sage byear from t_st
      

⭐数据查询

  • 查询条件
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vhJiPB3N-1655029883902)(https://cdn.jsdelivr.net/gh/tunanzh/Image/image-20220331214018147.png)]
-- 基本形式
select a,b from A,B where a = 1 and b < 0

-- between 20 and 22 => 20-22
-- in (20,22) => 20/22

-- 字符串匹配, _ =》 一个字符 , % =》0或多个字符
select * from t_st where sname like '宋_'

-- 排序 order by (升序ASC 降序DESC =》 空值最大)
select * from t_st order by spno,sage desc

-- 聚集函数
count sum avg max min

-- 基于分组的统计查询(Group by子句)
select cno,COUNT(Sno) from sc group by cno

-- 连表查询
select t_st.sno,sname,cno from t_st join sc on (t_st.sno = sc.sno) -- 等值连接
select t_st.sno,sname,cno from t_st,sc where t_st.sno = sc.sno  -- 等值连接
select sc1.sno from sc sc1,sc sc2 where sc1.sno = sc2.sno and sc1.cno = 'c104' and sc2.cno = 'c210'  -- 自身连接
select t_st.sno,sname,t_d.dno,dname from t_st,t_sp,t_d where t_st.spno = t_sp.spno and t_sp.dno = t_d.dno  -- 多表连接
select sno,sname from t_st where sno in (select sno from sc where cno = 'c104')  -- 嵌套查询
select * from t_st where spno in (select spno from t_st where sname = '李逵')  -- in的子查询
select sno,sname from student where exists(select * from sc where sc.sno = student.sno and cno = 'c104') -- exists子查询

⭐数据更新

-- 插入
insert into t_st(sage,sname) values ('2001','张三'),('2002','李四')

-- 修改
update t_t set tphone = '1111111111' where tname = '李四'

-- 删除
delete from t_st where sname = '张三'

四、数据库的安全性

防止非法用户越权使用、窃取、更改、破坏数据

  • 网络系统安全
    • 数据库的第一个安全屏障,木马程序、网络欺骗、入侵和病毒
  • 操作系统安全
    • 本身缺陷、安全配置、病毒威胁
  • 数据库管理系统的安全
    • 管理风险、用户风险(用户权限)、内部风险

image-20220331225434470

安全性控制的常用方法和技术

  • 用户身份鉴别
  • 存取控制
    • 包括定义用户权限合法权限检查两部分
    • 自主存取控制(DAC)
      • 用户对不同数据库对象有不同权限
      • 通过GRANT和REVOKE定义用户权限 =》 授权
      • 用户权限 = 数据库对象 + 操作类型
      • 数据库角色 =》 权限的集合
    • 强制存取控制(MAC)
      • 每个数据库对象有一个密级,根据密级判断权限
      • 主体大于等于客体,可读
      • 主体小于等于客体,可写

授权和收回

-- 创建登录名
create login zhang with password='1234',default_database=mydb;
-- 授权给用户test
grant select on t_st to test;
-- 收回权限test
revoke select on t_st from test

数据加密

  • OS层加密
    • OS层无法辨认数据库中的数据关系,从而无法产生合理密钥
  • DBMS内核层加密
    • 物理存取前完成数据加解密工作
    • 优点:实现加密功能与数据库管理系统之间的无缝耦合。
    • 缺点:加密运算在服务器端进行,加重负担。(一般不用)
  • DBMS外层加密
    • 将加密系统做成DBMS的外层工具,根据加密要求进行加解密
    • 优点:不会加重负载,且能够实现密文传输
    • 缺点:耦合性稍差

安全机制

  • 标识与鉴别
  • 访问控制
  • 安全审计
  • 备份与恢复

五、数据库的完整性

数据完整性 = 正确性 + 相容性

DBMS采用的方法

  1. 提供定义完整性约束条件的机制
  2. 提供完整性检查的方式
  3. 违约处理

实体完整性

CREATE TABLE Student
	( Sno CHAR(9) PRIMARY KEY/* 列级定义 */
	  Sname CHAR(20) NOT NULL,…...);
CREATE TABLE Student
	( Sno CHAR(9),
	  Sname CHAR(20) NOT NULL,
	  ……
	  PRIMARY KEY (Sno) ); /* 表级定义 */

检查和违约处理

  • 插入或对主码进行更新操作时,RDBMS按照实体完整性规则自动进行检查,包括:
    1. 检查主码是否唯一,如果不唯一则拒绝插入或修改
    2. 检查主码的各个属性是否为空,只要一个空就拒绝插入或修改

参照完整性

  • 定义

    • 在CREATE TABLE中使用FOREIGN KEY短语定义外码

    • 用REFERENCES短语知名外码所参照基本表的主码

    • CREATE TABLE SC
          ( Sno CHAR(9) NOT NULL,
            Cno CHAR(4) NOT NULL,
            Grade SMALLINTPRIMARY KEY (Sno, Cno)/*在表级定义实体完整性*/
            FOREIGN KEY (Sno) REFERENCES Student(Sno)/*在表级定义参照完整性*/
            FOREIGN KEY (Cno) REFERENCES Course(Cno) 
            /*在表级定义参照完整性*/
          );
      
  • 检查和违约处理

    • 被参照表 参照表 违约处理
      可能破坏参照完整性 插入元组 拒绝
      可能破坏参照完整性 修改外码值 拒绝
      删除元组 可能破坏参照完整性 拒绝/级连删除/设为空值
      修改主码值 可能破坏参照完整性 拒绝/级连修改/设为空值

用户定义完整性

CREATE TABLE时定义: /* 列级、元组级(表级)两种定义方法! */

  • 属性值非空(NOT NULL):通常采用列级定义
  • 属性值唯一(UNIQUE):列级、表级(UNIQUE(属性名))均可
  • 检查属性值是否满足一个布尔表达式(CHECK):两者均可
  • 违约处理:违反任一条用户定义的规则,均拒绝!

完整性约束命名子句

针对数据 =》 DERAULT、CHECK、PRIMARY KEY、FOREIGN KEY、UNIQUE等

CONSTRAINT <完整性约束名> [PRIMARY KEY短语 | FOREIGN KEY短语 | CHECK短语];

CREATE TABLE Student (Sno NUMERIC(6)
	CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),
	Sname CHAR(20) CONSTRAINT C2 NOT NULL,
	Sage NUMBER(3) CONSTRAINT C3 CHECK (Sage < 30),
	Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN ( '男''女'))CONSTRAINT StudentKey PRIMARY KEY(Sno) )

断言

  • 定义断言

    • CREATE ASSERTION<断言名> CHECK <约束规则>
      
      Create Assertion chk_SC_Num
      	Check ( 60 >= ( Select count (*) from SC, Course
      		Where SC.Cno = Course.Cno and Cname = ‘数据库’ ) );
      
    • 断言定义了数据库必须满足的约束

    • 断言可以定义涉及多表或聚集操作的更多复杂的完整性约束

    • 复杂的断言会造出很大的处理开销

  • 删除断言

    • DROP ASSERTION <断言名>;
      

触发器

针对操作 =》 INSERT、DELETE、UPDATE等

  • 触发器是一系列SQL语句组成的动作体,当对数据库做修改时,自动被执行

  • 满足条件

    • 触发条件
    • 触发内容
  • 利弊

    • 可以进行更发杂检查和操作,保证数据库一致,有更精细和强大的数据控制能力
    • 检测维护需要很大开销,降低增删改的效率
  • 定义触发器

    • CREATE TRIGGER <触发器名> 
          { BEFORE | AFTER} <触发事件> ON <表名>
          FOR EACH {ROW | STATEMENT}
          [WHEN <触发条件><触发动作体>
  • 激活触发器

    • 由触发事件激活,由数据库服务器自动执行
    • 一个数据表可能定义多个触发器
    • 同一个表的多个触发器激活时遵循如下执行顺序
      1. 执行该表上的BEFORE触发器
      2. 激活触发器的SQL语句
      3. 执行该表上的AFTER触发器
  • 删除触发器

    • DROP TRIGGER <触发器名> ON <表名>
    • 触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。

六、关系数据理论

关系的任何属性都是不可再分的

同一种关系模式下可以有很多的关系

关系中,表的行的顺序和列的顺序都可以任意交换

关系模式R(U,D,DOM,F)

  • R(U,F)

    • R:关系名
    • U:组成该关系的属性名集合
    • D:属性组U中属性所来自的域的集合
    • DOM:属性向域的映象集合
    • F:属性间数据的依赖关系集合
  • 数据依赖:属性值间的相互关联(主要体现于值的相等与否),数据库模式设计的关键

    • 一个关系内部属性与属性之间的约束关系
    • 现实世界属性间相互联系的抽象
    • 现实世界属性间相互联系的抽象,属于数据内在的性质
    • 依赖类型
      • 函数依赖
        • 一个关系有多个属性
      • 多值依赖

函数依赖

  • 设R(U)是一个属性集U上的关系模式,X和Y是U的子集

    • 若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。(只要x相等,y就一定相等
  • 如果Y包含于X =》 平凡函数依赖 ,否则=》 非平凡函数依赖

  • 完全函数依赖 =》 X 刚好可以确定所有的Y,X的任何一个子集都不能确定所有的Y

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

    • 不仅需要传递,还需要不包含,不反向依赖
    • 候选码在这里插入图片描述

      • 若候选码多于一个,选其一为主码
      • 候选码是最小的超码(其任何真子集都不是候选码)
      • 主属性和非主属性
        • 包含在任何一个候选码中的属性,主属性
        • 不包含在任何候选码中的属性,非主属性
      • 全码:整个属性组是码
    • 外部码

      • 关系模式R中属性或属性组X不是R的码,但X是另外一个关系模式的码,成X是R的外部码,也称外码

⭐范式

数据库系统概论复习笔记总结_第4张图片

  • 第一范式:所有属性不可分
  • 第二范式:每一个非主属性完全函数依赖于码
  • 第三范式:每一个非主属性既不部分依赖于码也不传递依赖于码
  • BCNF:每个属性都不传递依赖于R的候选键,每一个决定因素都包含码
    • 当R只有一个候选码
  • 数据库系统概论复习笔记总结_第5张图片

数据依赖的公理系统

  • 对于满足一组函数依赖F的关系模式R,其任何一个关系r,若函数依赖X→Y都成立,称F逻辑蕴含X→Y

    • 自反律
    • 增广律:若X→Y为F所蕴含,且Z包含于U,则XZ→YZ为F所蕴含
    • 传递律
  • 导出规则

    • 合并规则:由X→Y,X→Z,可得X→YZ
    • 伪传递规则:由X→Y,WY→Z,有XW→Z
    • 分解规则:由X→Y及Z包含于Y,有X→Z
  • 函数依赖闭包

    • 以X为基础,找到X子集的函数依赖,合在一起,直到不能合为止

    • 数据库系统概论复习笔记总结_第6张图片

    • 有效性:由F除法根据Armstrong公理推导出来的每一个函数依赖一定在F+

    • 完备性:F+中的每一个函数依赖,必定可以由F除法根据Armstrong公理推导出来

  • 函数依赖集等价

    • 若G+=F+,就说函数依赖集F覆盖G,或F与G等价
  • 最小依赖集

    • F任一函数依赖的右部只有一个函数
    • F不存在X→A,使得F与F-{X→A}等价
      • 函数依赖不能由F中其他函数依赖导出
    • F不存在X→A,X由真子集Z使得F-{X→A}∪{Z→A}与F等价
      • 各函数依赖最不都是最小属性集,不存在荣誉属性
    • 左边最简,右边不重

模式分解

  • 若要求分解保持函数依赖,可以达到3NF,不能达到BCNF
  • 若要求分解既保持函数依赖又具有无损连接性,可以达到3NF,不能达到BCNF
  • 若要求分解具有无损连接性,可以达到4NF

七、数据库设计

数据库系统概论复习笔记总结_第7张图片
数据库系统概论复习笔记总结_第8张图片
数据库系统概论复习笔记总结_第9张图片

  • 逻辑设计阶段
    1. 首先将E-R图转化成具体的数据库产品支持的数据模型,比如关系模型,形成数据库逻辑模型
    2. 然后根据用户处理的要求、安全性考虑,在基本表基础上建立试图,形成外模式
  • 物理设计阶段
    • 根据数据库管理系统特点和处理需要,进行物理存储安排,建立索引,形成数据库内模式

需求分析

  • 步骤
    1. 通过详细调查现实世界要处理的对象,了解原系统工作概况,明确用户各种需求
    2. 在此基础上确定新系统的功能
    3. 重点是调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性和完整性要求
  • 调查方法
    • 跟班作业
    • 开会调查
    • 请专人介绍
    • 询问
    • 设计调查表请用户填写
    • 查阅记录
  • 需求分析方法
    • 自顶向下的结构化分析阶段(SA)
    • 从最上层的系统组织机构入手哦,采用逐层分解的方式分析系统,用==数据流图(DFD)数据字典(DD)==描述系统
      • 数据流图

        • 以图形的方式刻画系统内的数据运动情况
        • 数据库系统概论复习笔记总结_第10张图片
      • 数据字典

        • 数据流图上所有成分的定义和解释的文字集合
        • 数据项:数据的最小单位
        • 数据结构:数据项有意义的集合,反应数据间组合关系
        • 数据流:可以输数据项,也可以是数据结构,表示某一处理过程中数据在系统内传输的路劲
        • 数据存储:处理过程中数据的存放场所

概念结构设计

  • 特点
    • 有丰富的语义表达能力
    • 易于交流和理解
    • 易于更改
    • 易于向各种数据模型转换
  • 策略
    • 自底向上(最常用)

      • 数据库系统概论复习笔记总结_第11张图片
    • 自顶向下

      • 数据库系统概论复习笔记总结_第12张图片
    • 逐步扩张

    • 混合策略

  • 概念结构设计
    1. 设计局部E-R模型

      • 分类:is member of
        • 对象
      • 概况:is subset of
        • 子集联系
      • 聚集:is part of
        • 内部类型和成分
      • 数据库系统概论复习笔记总结_第13张图片
    2. 设计全局E-R模型

      • 一次集成:一次全部集成
      • 逐步累积:一个一个融合
      • 属性冲突
        1. 属性值域冲突:属性值类型、取值范围或取值集合不同
        2. 取值单位不同
      • 命名冲突
        1. 同名同义
        2. 异名同义
      • 结构冲突
        1. 一个对象不同抽象
        2. 一个实体不同组成
        3. 一个联系不同类型
    3. 优化全局E-R模型

      • 实体个数尽量少
      • 实体属性尽量少
      • 实体联系无冗余

逻辑结构设计

数据库系统概论复习笔记总结_第14张图片

  • 步骤
    1. 将概念模型转化为某种数据模型

      • 关系的属性:实体的属性

      • 关系的码:实体的码

      • 数据库系统概论复习笔记总结_第15张图片

      • 将1:1,1:n,m:n的关系转化为独立的关系模式

        • 数据库系统概论复习笔记总结_第16张图片
      • 三个或以上实体的多元关系转化成一个关系模式

        • 数据库系统概论复习笔记总结_第17张图片
    2. 对数据模型优化

      • 以规范化理论为指导
      • 方法
        • 确数据依赖
        • 数据依赖极小化处理
        • 根据实际需要确定最合适范式
        • 对部分模式合并或分解
        • 对关系模式进行必要的分解,提高数据操作效率和存储空间利用率
      • 水平分解
        • 根据时间、空间、类型等设 置取值条件,满足条件的数据作为一个子表
      • 垂直分解
        • 以非主属性所描述的应用对 象生命历程的先后为条件
    3. 设计外模式

      • 使用更符合习惯的别名
      • 对不同级别用户定义不同视图,保证数据安全
      • 简化用户对系统的使用

物理结构设计

对已确定的逻辑数据结构,利用DBMS提供的方法、技术,以较优的存储结构、数据存取路径、合理的数据存储位置以及存储分配,设计出一个高效、可实现的物理数据库结构

  • 确定存取方法
    • DBMS常用存取方法
      • 索引:B+树、HASH
        • 对于经常查询、经常用聚集函数、经常连接操作的属性可以用索引
      • 聚簇
        • 提高查询速度,相同属性值元组集存放在连续的物理块中
        • 经常连接、经常比较可以建立(元组不能太少)
  • 物理结构的评价
    • 时间效率
    • 空间效率
    • 维护代价
    • 用户权衡

实施和维护

  • 数据库的运行和维护
    • 数据库的转储和恢复
    • 数据库的安全性、完整性控制
    • 数据库性能的监督、分析和改造
    • 数据库的重组织与重构
  • 数据载入和调试
    1. 定义数据库结构(表、视图…)
    2. 数据装载
    3. 编制与调试应用程序
  • 数据库试运行
    • 功能测试
    • 性能测试

数据库系统概论复习笔记总结_第18张图片

八、数据库编程(不考)

嵌入式SQL

  1. 交互式:在终端上每输入一条SQL,立即执行,等待用户输入下一条语句
  2. 嵌入式:
    • 宿主语言负责:运算、处理、流程控制等
    • SQL负责:数据库操作

使用规定

  1. 要以EXEC SQL开始,用;(分号)或END_EXEC结束
  2. 允许嵌入的SQL语句引用宿主语言的程序变量(共享变量)
    • 宿主变量出现在SQL语句前,前面加(:)来区别数据库变量(列名)
    • 共享变量需要宿主语言先定义,并用SQl的DECLARE语句说明

嵌入式SQL语句与主语言之间的通信

  1. SQL通信区
    • 向主语言传递SQL语句的执行状态信息
    • 使主语言能够据此控制程序流程
  2. 主变量(主语言的变量)
    • 主语言向SQL语句提供参数
    • 将SQL语句查询数据库的结果交主语言一起处理
  3. 游标(cursor)
    • 将SQL语句查询数据库的结果一起交给主语言处理
    • 解决集合性操作语言与过程性操作语言的不匹配

SQLSTATE

  • 00000:成功
  • 非0:出错
  • 02000:未找到元组

指示变量

  • 指示变量是一类SQL变量,用来管理与其相关联的宿主变量。
    • 主要用于处理空值(NULL),定义成2字节的整型
    • SQL引用的时候也要加:

游标

  • 原因
    • SQL语言面向集合,一次一集合
    • 主语言面向记录,一次一记录
    • 嵌入式SQL引入了游标概念来协调两种处理方式

游标:在查询结果的记录集合中移动的指针

  • 查询结果为多条记录的SELECT语句
  • CURRENT形式的UPDATE语句
  • CURRENT形式的DELETE语句

过程化SQL

PL/SQL
  • Oracle对SQL的扩展
  • 增加了过程化语句功能
  • 基本结构是块
    • 块之间可以互相嵌套
    • 每个块完成一个逻辑操作
  • 作用
    • 模块化程序特点
    • 对错误自动处理,遇到错误不会被中断
    • 可移植性好
    • 集成在数据库中,调用快,提高程序性能
Transact-SQL
  • 分为四大类
    • 程序定义语句
    • 程序操作语句
      • 有if,case,while
    • 程序控制语句
    • 附加的语言元素
  • 变量
    • 局部变量
      • declare @id char(10)
    • 全局变量
      • 必须以@@开头

存储过程和函数

存储过程:由过程化SQL语句书写的过程,经编译和优化后存储在数据库服务器中,使用时只要调用即可

  • 优点
    • 效率高
    • 降低客户机和服务器通信量
    • 方便实施企业规则
  • 存储过程可以包含数据操纵语句、变量、逻辑控制语句等
  • 函数和存储过程的异同
    • 同:都是持久性存储模块
    • 异:函数必须指定返回的类型

ODBC

数据库系统概论复习笔记总结_第19张图片

  • 目的
    • 提高应用程序和数据库的独立性,使得应用系统移植更加容易
  • 优点
    • 使应用系统的开发和数据库平台的选择、数据库设计等工作并行工作
    • 方便移植
    • 缩短系统开发时间

九、查询处理和查询优化

三个层次优化

  1. 语义优化
    • 利用模型的语义和完整性规则,优化查询
    • 早做选择运算,早做投影运算,写成等价的效果更好的语句
  2. 语法优化
    • 逻辑层优化,利用语法结构,优化操作执行顺序
  3. 执行优化
    • 物理层优化,存取路径和执行算法的选择与执行次序优化

查询处理的步骤

  • 查询分析
    • 语法错误
  • 查询检查
    • 语义错误(数据字典和数据库对象)
    • 根据用户权限和完整性约束 =》 存取权限
  • 查询优化
    • 代数优化
      • 等价变换,改变代数表达式中操作的次序和组合
    • 物理优化
      • 存取路径和底层操作算法的选择
  • 查询执行

选择操作

  • Select * from student where <条件表达式>
  • 全表扫描法(顺序扫描)
    • 只适合小表
  • 索引(散列)扫描方法
    • 适合由索引的
    • 通过索引找到主码或指针,在通过指针在查询的基本表中找到元组

连接操作

  1. 嵌套循环法

    • 对外层循环的每一个元组,检测内层循环的每一个元组(双层循环嵌套)
    • 检查两个元组在连接属性(sno)上是否相等
    • o(mn)
  2. 排序-合并法

    • 适合连接的诸表已经排好序的情况

    • 排序-合并连接方法的步骤

      1. 如果连接的表没有排好序,先对Student表和SC表按连接属性排序
      2. 取Student表中第一个Sno,一次扫描SC表中具有相同Sno的元组
      3. 当扫描到Sno不相同的第一个SC元组时,返回Student表扫描它的下一个元组,再扫描SC表具有相同属性的元组连接
    • 数据库系统概论复习笔记总结_第20张图片

    • o(m+n) =》 已排序好 , 否则 =》加上排序的开销

  3. 索引连接法

    1. 在SC表上建立属性Sno的索引(如果原来没有该索引)
    2. 对Student中每一个元组,由Sno值通过SC的索引查找相应的SC元组
    3. 把这些SC元组和Student连接起来
    4. 循环23,直到Student表中的元组处理完为止
    • 数据库系统概论复习笔记总结_第21张图片

    • 两边都有索引 = 排序合并

    • 一边有索引:扫描一遍另一表

  4. Hash Join法

    • 把连接属性作为hash码,用同一个hash函数把R和S中的元组散列到同一个hash文件中
    • 步骤
      • 划分阶段
        • 把包含较少元组的表进行一遍处理
        • 把它的元组按hash函数分散到hash表的桶中
      • 试探阶段
        • 对另一个表进行一遍处理
        • 把S的元组散列到适当的hash桶中
        • 把元组和桶中所有来自R并与之相匹配的元组连接起来

查询数的启发式优化

  1. 选择运算应尽可能先做
  2. 把投影运算和选择运算同时进行
  3. 把投影同其前后的双目运算结合起来
  4. 把某些选择同在去啊前面要执行笛卡尔积结合起来称为一个连接运算
  5. 找公共子表达式

十、数据恢复技术

  • 事务的定义

    • 一个数据库操作序列
    • 一个不可分割的工作单位
    • 恢复和并发控制的基本单位
  • 事务和程序是两个概念

    • 在关系数据库中,一个事务可以是一条SQL,一组SQL或整个程序
    • 一个程序通常包含多个事务
  • 一个事务就是将一系列的数据操纵SQL语句作为一个逻辑单元,逻辑单元里面的单个操作要么全做,要么全不做,以保证数据的完整性

事务的特性(ACID)

  • 原子性A

    • 事务是数据库的逻辑工作单位
    • 要么都做,要么都不做
  • 一致性C

    • 一致性状态:只包含成功事务提交的结果
    • 不一致性状态
      • 运行中故障,事务被迫中断
      • 未完成事务一部分修改已经进行
    • 事务执行结果是从一个一致性状态到另一个一致性状态
  • 隔离性I

    • 一个事务的执行不能被其他事务打扰
      • 一个事务内部的操作和使用的数据对其他并发事务都是隔离的
      • 并发执行的各个事物之间不能互相干扰
  • 持续性D

    • 事务一旦提交,对数据库的改变就是永久的
  • 破坏事务ACID特性的因素

    1. 多个事务并行运行,不同事务的操作交叉执行
    2. 事务运行过程中被强行停止
  • 数据库的恢复

    • 把错误状态恢复到已知的正确状态的功能,是对付故障的功能

故障的种类

  1. 事务内部故障
  • 运行工程中未到正常终止就夭折了
  • 常见原因
    • 输入数据有误(预期)
    • 运算溢出(非预期)
    • 违反完整性规则(预期)
    • 应用程序出错(非预期)
    • 并行事务死锁(非预期)
  • 恢复
    • 撤销事务(UNDO),强行回滚事务,清除所有修改
  1. 系统故障(软故障)
  • 整个系统突然被破坏,正在运行的事务非正常终止,内存缓冲区信息全部丢失
    • 活跃事务只运行了一部分
    • 部分已完成事务更新后的数据还在缓冲区中,没来得及刷新到磁盘上
  • 常见原因
    • 操作系统或DBMS代码错误
    • 操作员操作失误
    • 特定类型的硬件错误
    • 突然停电
  • 恢复
    1. 撤销所有未完成的事务
    2. 重做所有已提交的事务
  1. 介质故障(硬故障)
  • 磁盘损坏、磁头碰撞等
  • 硬件故障使存储在外存中数据部分丢失或全部丢失
  • 可能性小、破坏性大
  • 恢复
    • 装入数据库发生介质故障前某个时刻的数据副本
    • 重做此时始所有成功事务,将事务已提交结果重新计入数据库
  1. 计算机病毒
  • 人为破坏,可移植和传播
  • 两种可能
    1. 数据库本身被破坏
    2. 数据不准确
  • 恢复
    • 利用存储在系统其他地方的冗余数据来重建数据库

恢复的实现技术

  • 数据转储 =》 备份=》数据

    • 定期复制备份,作为后被副本

    • 静态转储

      • 在系统中无事务时进行转储
      • 优点:简单
      • 缺点:降低数据库可用性
        • 转储必须等用户事务结束
        • 新的事务必须等转储结束
      • 数据库系统概论复习笔记总结_第22张图片
    • 动态转储

      • 转出期间可以对数据库进行存取和修改,与用户事务并发执行
      • 优点
        • 不用等待正在运行事务结束,不影响事务正常运行
      • 缺点
        • 不能保证副本数据正确有效
      • 需要记录期间的修改活动,建立日志文件后被副本加上日志文件
      • 数据库系统概论复习笔记总结_第23张图片
    • 海量转储和增量转储的比较

      • 用海量转储得到后备副本更方便
      • 如果数据库大,事务处理频繁,用增量更有效
    • 转储策略

      • 定期数据转储,制作后备副本
      • 转储很耗费实践和资源,不能频繁进行,因此要选择适当的转储周期和方法
      • 数据库系统概论复习笔记总结_第24张图片
  • 登记日志文件 =》 日志=》记录或数据块

    • 日志文件是用来记录事务对数据库的更新操作的文件

    • 格式

      • 以记录为单位的日志文件
      • 以数据块为单位的日志文件
    • 记录为单位的日志文件

      • 开始标记(事务标志 + BEGIN TRANSACTION)
        • 如:T1 BEGIN TRANSACTION
      • 结束标记(COMMIT或ROLLBACK)
        • 如:T1 COMMIT
      • 每个记录的内容
        • 事务标识
        • 操作类型
        • 操作对象
        • 更新前值
        • 更新后值
        • 如:T1 U AA 18 20
    • 数据块为单位的日志文件

      • 日志记录内容
        • 事务标识
        • 被更新的数据块
        • 更新前整个数据块的值
        • 更新后整个数据块的值
    • 用途

      • 事务故障恢复
      • 系统故障恢复
      • 协助后被副本进行介质故障恢复
      • 数据库系统概论复习笔记总结_第25张图片
    • 登记日志文件的原则

      • 为保证数据库可恢复,登记日志文件时必须遵循两条原则
        • 登记的次序严格按并行事务执行的时间次序
        • 先写日志,后写数据库
  • 恢复策略

    • 事务故障

      1. 反向扫描日志文件,找到事务更新操作
      2. 对更新操作进行拟操作
      3. 继续反向扫描该事务其他更新操作,同样处理,直到读到事务开始标记
    • 系统故障

      1. 正向扫描文件日志,查找Redo和Undo队列
      2. 对Undo队列进行Undo处理
      3. 对Redo队列进行Redo处理
      • 重启自动完成
    • 介质故障

      1. 装入最新后备数据库副本,使数据库恢复到最近一次存储一致性状态
        • 对静态转储的数据库副本,转入后处于一致性状态
        • 对动态,装入后还需要Redo+Undo
      2. 装入有关日志文件副本,重做已完成事务

具有检查点的恢复技术 =》检查点 =》 定时记录用于动态维护

  • 原因

    • 搜索整个日志和Redo处理浪费大量时间
  • 检查点记录的内容

    • 建立检查点时刻所有正在执行的事务清单,记录这些事务最近一个日志记录地址
  • Redo文件的内容

    • 记录各个检查点记录在日志文件中的地址
  • 数据库系统概论复习笔记总结_第26张图片

  • 动态维护日志文件的方法

    • 周期性执行
      • 建立检查点,保护数据库状态
    • 具体步骤
      1. 将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上
      2. 在日志文件中写入一个检查点记录
      3. 将当前数据缓冲区的所有数据记录写入磁盘的数据库中
      4. 检查点记录在日志文件的地址写入redo文件中
  • 利用检查点的恢复策略

    • 使用检查点方法可以改善恢复效率
    • 当事务T在一个检查点之前提交
      • T对数据库所做的修改已经写入数据库
      • 恢复处理时,没有必要对事务T执行REDO
    • 当事务还未完成
      • 修改已经写入数据库
      • 需要REDO,起始点是检查点
    • 步骤
      1. 从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件找到最后一个检查点记录
      2. 由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST
        • 建立两个事务队列
          • UNDO-LIST
          • REDO-LIST
        • 把ACTIVE-LIST暂时放入UNDO-LIST,REDO-LIST为空
      3. 从检查点开始正向扫描日志文件,直到结束
        • 由新开始事务Ti,暂时放入UNDO-LIST
        • 由提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LILST
      4. 对UNDO-LIST每个事务执行UNDO操作,对REDO-LIST事务执行REDO操作

数据库系统概论复习笔记总结_第27张图片

十一、并发控制

事务时并发控制的基本单元,为了保证事务的隔离性和一致性,需要进行并发控制

并发操作不一致性(破坏了隔离性)

  1. 丢失修改
    • 一个改了,被另一个覆盖了
  2. 不可重复读
    • A读了,B改了,A再读数据不同
    • A读了,B删了,A再读读不到
    • A读了,B插入数据,A再读发现数据多了
  3. 读脏数据
    • A改了之后,B读,A撤销,B读到的数据就不一致了

并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,避免不一致。

封锁

  1. 排他锁(写锁)X锁
    • 事务T给对象A加X锁,就只允许T读写A,其他事务不能再对A加锁,在T释放之前不能读写A
  2. 共享锁(读锁)S锁
    • 事务T给对象A加S锁,T可以读A但不能写A,其他事务只能给A加S锁,不能加X锁。
  • 一级封锁协议
    • T修改数据R之前需要加X锁,直到事务结束才释放
      • 不能保证不可重复读和不读脏数据
  • 二级封锁协议
    • 一级锁基础上增加事务T在读取数据R之前需要加S锁,读完后释放
      • 不能保证不可重复读
  • 三级封锁协议
    • 在一级基础上增加T在读取数据R之前必须先对其加S锁,直到事务结束才释放

数据库系统概论复习笔记总结_第28张图片

活锁和死锁

  • 活锁
    • 事务T可能永远等待
  • 死锁
    • T1在等待T2,T2在等待T1,两个事务永远不可能结束
  • 死锁的预防
    • 一次封锁法
      • 每个事务必须一次将所有要使用的数据全部加锁
      • 作用:有效防止死锁
      • 缺点:
        1. 数据大量加锁,降低并发度
        2. 数据不断变化,原来不封锁的可能会编程封锁,会扩大封锁范围,进一步降低并发度
    • 顺序封锁法
      • 预先规定封锁顺序,所有事务按照这个顺序封锁
      • 作用:有效防止死锁
      • 缺点:
        1. 维护封锁顺序成本高
        2. 很难确定每一个事务封锁哪些对象,很难按规定的顺序去施加封锁
    • 两种方法都不太合适
  • 死锁的诊断与解除
    • 超时法
      • 事务的等待时间超过规定时限,就认为发生了死锁
      • 优点:简单
      • 缺点:可能误判,时限过长不能及时发展
    • 事务等待图法
      • 事务等待图是有向图,每个节点是正运行事务,U为边的集合,每条边表示事务等待的情况,若T1等待T2,则T1指向T2
      • 若有回路:存在死锁
    • 选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有的锁。

并发调度的可串行化

  • 多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时结果相同
  • 可串行性:并发事务正确调度的准则
  • 判断可串行化的充分条件 =》 冲突可串行化调度 ,但不是必要条件
    • 冲突操作:不同事务对统一数据的读写和写写操作
    • 如果一个调度是冲突可串行化,则一定是可串行化的调度
      • 冲突可串行化:调度Sc在保证冲突操作次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc‘,如果Sc’是串行的

两段锁协议

事务遵循两段锁协议是可串行化调度的充分条件,不是必要条件

  • 事务分为两个阶段
    1. 扩展阶段 =》 获得封锁
      • 事务可申请任何锁,但是不能释放任何锁
    2. 收缩阶段 =》 释放封锁
      • 事务可以释放任何锁,但是不能申请
  • 若并发执行的所有事务都遵循两段锁协议,则对这些事务的任何并发调度策略都是可串行化的

你可能感兴趣的:(笔记,数据库,database,sqlserver,sql)