【数据库系统概论】笔记(前五章)

文章目录

第一章 绪论

1.1 数据库系统概述

  • 数据(Data):是数据库中存储的基本对象。数据的含义称为数据的语义,数据与其语义是不可分的。

  • 数据库(Database):是长期储存在计算机内、有组织的、可共享大量数据的集合。

  • 数据库管理系统(DBMS):位于用户与操作系统之间的一层数据管理软件,是基础软件,是一个大型复杂的软件系统

    • 主要功能:数据定义功能
    • 数据组织、存储管理
    • 数据操纵功能
    • 数据库的事务管理运行管理
    • 数据库的建立维护功能
  • 数据库系统(DBS):数据库系统的构成

    • 数据库
    • 数据库管理系统(及其应用开发工具)
    • 应用程序
    • 数据库管理员
  • 数据管理:对数据进行分类、组织、编码、存储、检索和维护

  • 数据管理技术的发展过程

    • 人工管理阶段(20世纪50年代中之前)
    • 文件系统阶段(20世纪50年代末–60年代中)
    • 数据库系统阶段(20世纪60年代末–现在)
  • 数据管理技术的发展动力

    • 应用需求的推动
    • 计算机硬件的发展
    • 计算机软件的发展
  • 数据库系统的特点

    • 数据结构化
      • 数据的整体结构化是数据库的主要特征之一
      • 不再仅仅针对某一个应用,而是面向全组织
      • 不仅数据内部结构化,整体是结构化的,数据之间具有联系
    • 数据的共享性高,冗余度低且易扩充
      • 减少数据冗余,节约存储空间
      • 避免数据之间的不相容性与不一致性
      • 使系统易于扩充
    • 数据独立性高
      • 物理独立性:指用户的应用程序与数据库中数据的物理存储是相互独立的。当数据的物理存储改变了,应用程序不用改变
      • 逻辑独立性:指用户的应用程序与数据库的逻辑结构是相互独立的。数据的逻辑结构改变了,应用程序不用改变
      • 数据独立性由数据库管理系统的二级映像功能来保证。
    • 数据由数据库管理系统统一管理和控制
      • (1)数据的安全性(Security)保护:保护数据以防止不合法的使用造成的数据的泄密和破坏。
      • (2)数据的完整性(Integrity)检查保证数据的正确性、有效性和相容性。
      • (3)并发(Concurrency)控制对多用户的并发操作加以控制和协调,防止相互干扰而得到错误的结果。
      • (4)数据库恢复(Recovery)将数据库从错误状态恢复到某一已知的正确状态。

1.2 数据模型

数据模型是对现实世界数据特征的抽象。通俗地讲数据模型就是现实世界的模拟。
数据模型应满足三方面要求

  1. 能比较真实地模拟现实世界
  2. 容易为人所理解
  3. 便于在计算机上实现

数据模型是数据库系统的核心和基础

数据模型分为两类(两个不同的层次)
(1) 概念模型 也称信息模型,它是按用户的观点来对数据和信息建模,用于数据库设计。
(2) 逻辑模型和物理模型
逻辑模型主要包括网状模型、层次模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等。按计算机系统的观点对数据建模,用于DBMS实现。
物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法。

客观对象的抽象过程--------两步抽象

  1. 现实世界中的客观对象抽象为概念模型;将现实世界抽象为信息世界
  2. 把概念模型转换为某一数据库管理系统支持的数据模型。将信息世界转换为机器世界在这里插入图片描述
    概念模型的一种表示方法:实体-联系方法
    (1)实体(Entity)
    客观存在并可相互区别的事物称为实体。
    可以是具体的人、事、物或抽象的概念。
    (2)属性(Attribute) 实体所具有的某一特性称为属性。
    一个实体可以由若干个属性来刻画。
    (3)码(Key) 唯一标识实体的属性集称为码。
    (4)实体型(Entity Type) 用实体名及其属性名集合来抽象和刻画同类实体称为实体型
    (5)实体集(Entity Set) 同一类型实体的集合称为实体集
    (6)联系(Relationship)
    现实世界中事物内部以及事物之间的联系在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系。
    实体内部的联系通常是指组成实体的各属性之间的联系
    实体之间的联系通常是指不同实体集之间的联系
    实体之间的联系有一对一、一对多和多对多等多种类型
    实体-联系方法(Entity-Relationship Approach)用E-R图来描述现实世界的概念模型,E-R方法也称为E-R模型

数据模型的组成要素

  • 数据结构:描述数据库的组成对象,以及对象之间的联系,数据结构是对系统静态特性的描述
  • 数据操作 :对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则,数据操作是对系统动态特性的描述
  • 数据的完整性约束条件:一组完整性规则的集合

常用的数据模型
层次模型(Hierarchical Model)
网状模型(Network Model)
关系模型(Relational Model)
面向对象数据模型(Object Oriented Data Model)
对象关系数据模型(Object Relational Data Model)
半结构化数据模型(Semistruture Data Model)

关系模型(Relational Model)
优点
建立在严格的数学概念的基础上
概念单一
实体和实体之间的联系都用关系来表示
对数据的检索结果也是关系
关系模型的存取路径对用户透明
具有更高的数据独立性,更好的安全保密性
简化了程序员的工作和数据库开发建立的工作

1.3 数据库系统的结构

从数据库应用开发人员角度看,数据库系统通常采用三级模式结构,是数据库系统内部的系统结构
从数据库最终用户角度看,数据库系统的结构分为:
单用户结构
主从式结构
分布式结构
客户-服务器
浏览器-应用服务器/数据库服务器多层结构等

数据库系统模式的概念

型(Type):对某⼀类数据的结构和属性的说明。
值(Value):是型的⼀个具体赋值。
模式(Schema):数据库逻辑结构和特征的描述,是型的描述,不涉及具体值,反映
的是数据的结构及其联系,模式是相对稳定的。
实例(Instance):模式的⼀个具体值,反映数据库某⼀时刻的状态,同⼀个模式可
以有很多实例,实例随数据库中的数据的更新而变动。

数据库系统的三级模式结构

模式(Schema):

  • 也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有⽤⼾的
    公共数据视图。
  • ⼀个数据库只有⼀个模式
  • 是数据库系统模式结构的中间层。与数据的物理存储细节和硬件环境⽆关、与
    具体的应⽤程序、开发⼯具及⾼级程序设计语⾔⽆关。
  • 模式的定义包括:数据的逻辑结构(数据项的名字、类型、取值范围等)、数
    据之间的联系、数据有关的安全性、完整性要求。

外模式(External Schema):

  • 也称⼦模式或⽤⼾模式,是数据库⽤⼾(包括应⽤程序员和最终⽤⼾)使⽤的
    局部数据的逻辑结构和特征的描述。
  • 是数据库⽤⼾的数据视图,是与某⼀应⽤有关的数据的逻辑表⽰。
  • 外模式的⽤途:保证数据库安全性的⼀个有⼒措施、每个⽤⼾只能看⻅和访问
    所对应的外模式中的数据。

内模式(Internal Schema):

  • 也称存储模式,是数据物理结构和存储⽅式的描述,是数据在数据库内部的表
    ⽰⽅式。
  • ⼀个数据库只有⼀个内模式

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

三级模式是对数据的三个抽象级别
二级映象在数据库管理系统内部实现这三个抽象层次的联系和转换

  • 外模式/模式映像
    模式描述的是数据的全局逻辑结构外模式描述的是数据的局部逻辑结构 ,同一个模式可以有任意多个外模式 ,每一个外模式,数据库系统都有一个外模式/模式映象,定义外模式与模式之间的对应关系;映象定义通常包含在各自外模式的描述中。
    保证数据的逻辑独立性
    当模式改变时,数据库管理员对外模式/模式映象作相应改变,使外模式保持不变
    应用程序是依据数据的外模式编写的,应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性
  • 模式/内模式映像
    模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。
    例如,说明逻辑记录和字段在内部是如何表示的
    数据库中模式/内模式映象是唯一的
    该映象定义通常包含在模式描述中模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。
    例如,说明逻辑记录和字段在内部是如何表示的
    数据库中模式/内模式映象是唯一的
    该映象定义通常包含在模式描述中
    保证数据的物理独立性
    当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变。
    应用程序不受影响。保证了数据与程序的物理独立性,简称数据的物理独立性。
    数据库模式即全局逻辑结构是数据库的中心与关键
    独立于数据库的其他层次
    设计数据库模式结构时应首先确定数据库的逻辑模式

1.4 数据库系统的组成

数据库系统的组成:

  • 数据库
  • 数据库管理系统(及其开发⼯具)
  • 应⽤程序
  • 数据库管理员

硬件平台及数据库:

  • ⾜够⼤的内存
  • ⾜够的⼤的磁盘或磁盘阵列等设备
  • 较⾼的通道能⼒,提⾼数据传送率

软件:

  • 数据库管理系统
  • ⽀持数据库管理系统运⾏的操作系统
  • 与数据库接口的⾼级语⾔及其编译系统
  • 以数据库管理系统为核⼼的应⽤开发⼯具
  • 为特定应⽤环境开发的数据库应⽤系统

⼈员:

  • 数据库管理员:决定数据库中的信息内容和结构、决定数据库的存储结构和存取策略、定义数据的安全性要求和完整性约束条件、监控数据库的使⽤和运⾏、数据库的改进和重组。
  • 系统分析员:负责应⽤系统的需求分析和规范说明、与⽤⼾及数据库管理员结合,确定系统的硬软件配置、参与数据库系统的概要设计。
  • 数据库设计⼈员:参加⽤⼾需求调查和系统分析、确定数据库中的数据、设计数据库各级模式。
  • 应⽤程序员:设计和编写应⽤系统的程序模块、进⾏调试和安装。
  • 最终⽤⼾:⽤⼾是指最终⽤⼾(End User)。最终⽤⼾通过应⽤系统的⽤⼾接口使⽤数据库。包括:偶然⽤⼾、简单⽤⼾和复杂⽤⼾。

第二章 关系数据库

2.1 关系数据结构及形式化定义

单一的数据结构----关系
现实世界的实体以及实体间的各种联系均用关系来表示
逻辑结构----二维表
从用户角度,关系模型中数据的逻辑结构是一张二维表
建立在集合代数的基础上

  1. 域(Domain)是一组具有相同数据类型的值的集合。
  2. 笛卡尔积(Cartesian Product)给定一组域D1,D2,…,Dn,允许其中某些域是相同的。
    D1,D2,…,Dn的笛卡尔积为:
    D1×D2×…×Dn ={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}
    所有域的所有取值的一个组合
    不能重复
  3. 基数(Cardinal number)
    若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为:

笛卡尔积的表示方法
笛卡尔积可表示为一张二维表
表中的每行对应一个元组,表中的每列对应一个域
例如,给出3个域:
D1=导师集合SUPERVISOR={张清玫,刘逸}
D2=专业集合SPECIALITY={计算机专业,信息专业}
D3=研究生集合POSTGRADUATE={李勇,刘晨,王敏}
D1,D2,D3的笛卡尔积为D1×D2×D3={
(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),
(张清玫,计算机专业,王敏),(张清玫,信息专业,李勇),
(张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),
(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),
(刘逸,计算机专业,王敏),(刘逸,信息专业,李勇),
(刘逸,信息专业,刘晨),(刘逸,信息专业,王敏) }
基数为2×2×3=12

  1. 关系
    关系:现实世界的实体以及实体间的各种联系均⽤关系来表⽰。
    • 关系的表⽰: R(D1,D2,…,Dn),其中 R:关系名、n:关系的目或度(Degree)
    • 元组:关系中的每个元素是关系中的元组,通常⽤ 表⽰。
    • 单元关系与⼆元关系:当n=1时,称该关系为单元关系(Unary relation)或⼀元关系。当n=2时,称该关系为⼆元关系(Binary relation)。
    • 关系的表⽰:关系也是⼀个⼆维表,表的每⾏对应⼀个元组,表的每列对应⼀个域。
    • 属性:关系中不同列可以对应相同的域,为了加以区分,必须对每列起⼀个名字,称为属性(Attribute)。n⽬关系必有n个属性。
    • 码:①若关系中的某⼀属性组的值能唯⼀地标识⼀个元组,则称该属性组为候选码。②若关系模式的所有属性组是这个关系模式的候选码,则称为全码(Allkey)。③若⼀个关系有多个候选码,则选定其中⼀个为主码(Primarykey)。④候选码的诸属性称为主属性(Prime attribute)。⑤不包含在任何侯选码中的属性称为⾮主属性(Non-Prime attribute)或⾮码属性(Non-keyattribute) 。
    • 三类关系:基本关系(基本表或基表),是实际存在的表,是实际存储数据的逻辑表⽰。查询表,是查询结果对应的表。视图表,是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
    • 基本关系的性质:①列是同质的(Homogeneous)。②不同的列可出⾃同⼀个域。③ 列的顺序⽆所谓,列的次序可以任意交换。④任意两个元组的候选码不能相同。⑤⾏的顺序⽆所谓,⾏的次序可以任意交换。⑥分量必须取原⼦值
      (这是规范条件中最基本的⼀条)

关系模式

关系模式(Relation Schema)是型,关系是值。关系模式是对关系的描述。
关系模式与关系:关系模式是对关系的描述,是静态的、稳定的。关系是关系模式在某⼀时刻的状态或内容,是动态的、随时间不断变化的。关系模式和关系往往笼统称为关系。

关系数据库

关系数据库:在⼀个给定的应⽤领域中,所有关系的集合构成⼀个关系数据库。
关系数据库的型与值:

  • 关系数据库的型: 关系数据库模式,是对关系数据库的描述。
  • 关系数据库的值: 关系模式在某⼀时刻对应的关系的集合,通常称为关系数据库。

关系模型的存储结构

关系数据库的物理组织:

  • 有的关系数据库管理系统中⼀个表对应⼀个操作系统⽂件,将物理数据组织交给操作系统完成。
  • 有的关系数据库管理系统从操作系统那⾥申请若⼲个⼤的⽂件,⾃⼰划分⽂件空间,组织表、索引等存储结构,并进⾏存储管理。

2.2 关系操作

基本的关系操作:

  • 查询操作:选择、投影、连接、除、并、差、交、笛卡尔积
  • 数据更新:插⼊、删除、修改

关系操作的特点:

  • 集合操作⽅式:操作的对象和结果都是集合,⼀次⼀集合的⽅式。

关系代数语⾔:

  • ⽤对关系的运算来表达查询要求
  • 代表:ISBL
    关系演算语⾔:⽤谓词来表达查询要求
  • 元组关系演算语⾔
    • 谓词变元的基本对象是元组变量
    • 代表:APLHA, QUEL
  • 域关系演算语⾔
    • 谓词变元的基本对象是域变量
    • 代表:QBE

具有关系代数和关系演算双重特点的语⾔

  • 代表:SQL(Structured Query Language)

2.3 关系的完整性

实体完整性

实体完整性规则(Entity Integrity):若属性A是基本关系R的主属性,则属性A不能取空值。

  • 实体完整性规则是针对基本关系而⾔的。⼀个基本表通常对应现实世界的⼀个实体集。
  • 现实世界中的实体是可区分的,即它们具有某种唯⼀性标识。
  • 关系模型中以主码作为唯⼀性标识。
  • 主码中的属性即主属性不能取空值。

参照完整性

关系间的引⽤:在关系模型中实体及实体间的联系都是⽤关系来描述的,⾃然存在着关系与关系间的引⽤。
外码(Foreign Key):设F是基本关系 的⼀个或⼀组属性,但不是关系 的码。如果F与基本关系 S的主码K 相对应,则称 是 的外码。

  • 基本关系R称为参照关系(Referencing Relation)。
  • 基本关系S称为被参照关系(Referenced Relation)或⽬标关系(TargetRelation)。
  • 关系R和S不⼀定是不同的关系。
  • ⽬标关系S的主码Ks 和参照关系的外码F必须定义在同⼀个(或⼀组)域上。
  • 外码并不⼀定要与相应的主码同名。

参照完整性规则:若属性(或属性组)F是基本关系 的外码它与基本关系 的主码
相对应(基本关系R和S不⼀定是不同的关系),则对于 中每个元组在 上的值必须
为:取空值(F的每个属性值均为空值)、或者等于 中某个元组的主码值。

用户定义的完整性

针对某⼀具体关系数据库的约束条件,反映某⼀具体应⽤所涉及的数据必须满⾜的语义要求。
关系模型应提供定义和检验这类完整性的机制,以便⽤统⼀系统的⽅法处理它们,而不需由应⽤程序承担这⼀功能

2.4 关系代数

关系代数是⼀种抽象的查询语⾔,它⽤对关系的运算来表达查询。
关系代数的运算对象是关系,运算结果亦为关系。
关系代数的运算符有两类:集合运算符和专⻔的关系运算符。
传统的集合运算是从关系的“⽔平”⽅向即⾏的⻆度进⾏,专⻔的关系运算不仅涉及⾏而且涉及列。在这里插入图片描述

传统的集合运算

并(Union):仍为n⽬关系,由属于R或属于S的元组组成。
差(Difference):仍为n⽬关系,由属于R而不属于S的所有元组组成。
交(Intersection):仍为n⽬关系,由既属于R⼜属于S的元组组成。
笛卡尔积(Cartesian Product)。

专门的关系运算

选择:

  • 选择⼜称为限制(Restriction)。
  • 选择运算符的含义:在关系R中选择满⾜给定条件的诸元组。
  • 选择运算是从关系R中选取使逻辑表达式F为真的元组,是从⾏的⻆度进⾏的运算。

投影:

  • 从R中选择出若⼲属性列组成新的关系。
  • 投影操作主要是从列的⻆度进⾏运算。
  • 投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复⾏)。

连接:
连接运算的含义:从两个关系的笛卡尔积中选取属性间满⾜⼀定条件的元组。

  • 等值连接(equijoin):θ为“=”的连接运算称为等值连接。从关系R与S的⼴义笛卡尔积中选取A、B属性值相等的那些元组。
  • ⾃然连接(Natural join):⾃然连接是⼀种特殊的等值连接。在两个关系中进⾏⽐较的分量必须是相同的属性组,在结果中把重复的属性列去掉。
  • 悬浮元组(Dangling tuple):两个关系R和S在做⾃然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组。
  • 外连接(Outer Join):如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(Null),就叫做外连接。左外连接(LEFT OUTER JOIN或LEFT JOIN)是只保留左边关系R中的悬浮元组。右外连接(RIGHT OUTER JOIN或RIGHTJOIN)是只保留右边关系S中的悬浮元组。

除运算:

  • 给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可
  • 以有不同的属性名,但必须出⾃相同的域集。
  • R与S的除运算得到⼀个新的关系P(X)。查询R.Y=S.Y的所有R的X。

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

3.1 SQL概述

SQL(Structured Query Language):结构化查询语⾔,是关系数据库的标准语⾔。
SQL是⼀个通⽤的、功能极强的关系数据库语⾔。

3.1.1 SQL 的产生与发展

⽬前,没有⼀个数据库系统能够⽀持SQL标准的所有概念和特性。

3.1.2 SQL的特点

综合统⼀:集数据定义语⾔(DDL),数据操纵语⾔(DML),数据控制语⾔(DCL)功能于⼀体。可以独⽴完成数据库⽣命周期中的全部活动。⽤⼾数据库投⼊运⾏后,可根据需要随时逐步修改模式,不影响数据库的运⾏。数据操作符统⼀。

⾼度⾮过程化:⾮关系数据模型的数据操纵语⾔“⾯向过程”,必须指定存取路径。而SQL只要提出“做什么”,⽆须了解存取路径。存取路径的选择以及SQL的操作过程由系统⾃动完成。

⾯向集合的操作⽅式:⾮关系数据模型采⽤⾯向记录的操作⽅式,操作对象是⼀条记录。SQL采⽤集合操作⽅式。

以同⼀种语法结构提供多种使⽤⽅式:SQL是独⽴的语⾔,能够独⽴地⽤于联机交互的使⽤⽅式。SQL⼜是嵌⼊式语⾔,SQL能够嵌⼊到⾼级语⾔(例如C,C++,Java)程序中,供程序员设计程序时使⽤。

SQL功能极强,完成核⼼功能只⽤了9个动词。在这里插入图片描述

3.3 数据定义

SQL的数据定义功能:模式定义、表定义、视图和索引的定义 。

3.3.1 模式的定义与删除

# 定义模式
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句
>|<授权定义子句>]
# 删除模式
# CASCADE(级联)删除模式的同时把该模式中所有的数据库对象全部删除
# RESTRICT(限制)如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该
删除语句的执行。仅当该模式中没有任何下属的对象时才能执行。
DROP SCHEMA <模式名> <CASCADE|RESTRICT>

3.3.2 基本表的定义、删除与修改

# 定义基本表
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ][,<表级完整性约束条件> ] );
# 定义基本表所属模式
Create table"S-T".Student(......); /*模式名为 S-T*/
Create table "S-T".Cource(......);
Create table "S-T".SC(......);
# 显示当前的搜索路径:
SHOW search_path;
# 设置搜索路径,然后定义基本表
SET search_path TO "S-T",PUBLIC;
Create table Student(......);
# 修改基本表
ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ ALTER COLUMN <列名><数据类型> ] ;
# 删除基本表
DROP TABLE <表名>RESTRICT| CASCADE;

数据类型 含义
CHAR(n),CHARACTER(n) ⻓度为n的定⻓字符串
VARCHAR(n),CHARACTERVARYING(n)最⼤⻓度为n的变⻓字符串
CLOB 字符串⼤对象
BLOB ⼆进制⼤对象
INT,INTEGER ⻓整数(4字节)
SMALLINT 短整数(2字节)
BIGINT ⼤整数(8字节)
NUMERIC(p,d)
定点数,由p位数字(不包括符号、小数点)组成,小数后⾯有d位数字
DECIMAL(p, d), DEC(p, d) 同NUMERIC
REAL 取决于机器精度的单精度浮点数
DOUBLE PRECISION 取决于机器精度的双精度浮点数
FLOAT(n) 可选精度的浮点数,精度⾄少为n位数字
BOOLEAN 逻辑布尔量
DATE ⽇期,包含年、⽉、⽇,格式为YYYY-MM-DD
TIME 时间,包含⼀⽇的时、分、秒,格式为HH:MM:SS
TIMESTAMP 时间戳类型
INTERVAL 时间间隔类型

3.3.3 索引的建立与删除

建⽴索引的⽬的:加快查询速度。
关系数据库管理系统中常⻅索引:

  • 顺序⽂件上的索引。
  • B+树索引。
  • 散列(hash)索引。
  • 位图索引。

特点:

  • B+树索引具有动态平衡的优点 。
  • HASH索引具有查找速度快的特点。

谁可以建⽴索引:数据库管理员 或 表的属主(即建⽴表的⼈)。
谁维护索引:关系数据库管理系统⾃动完成 。
使⽤索引:关系数据库管理系统⾃动选择合适的索引作为存取路径,⽤⼾不必也不能
显式地选择索引。

# 建立索引
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]);
# 修改索引
ALTER INDEX <旧索引名> RENAME TO <新索引名>
# 删除索引
DROP INDEX <索引名>;

3.3.4 数据字典

数据字典是关系数据库管理系统内部的⼀组系统表,它记录了数据库中所有定义信
息。关系数据库管理系统在执⾏SQL的数据定义语句时,实际上就是在更新数据字典
表中的相应信息。

3.4 数据查询

SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]FROM <表名或视图名>[,<表名或视图名> ]|(SELECT 语句)
[AS]<别名>
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];

3.4.1 单表查询

## 选择表中的若干列
# 查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示系名。
SELECT Sname,'Year of Birth: ',2014-Sage,LOWER(Sdept)
FROM Student;
# 使用列别名改变查询结果的列标题。
SELECT Sname NAME,'Year of Birth:' BIRTH, 2014-Sage
BIRTHDAY,LOWER(Sdept) DEPARTMENT
FROM Student;
## 选择表中的若干元组。
# 查询选修了课程的学生学号,指定DISTINCT关键词,去掉表中重复的行
SELECT DISTINCT Sno FROM SC;
# 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
# 查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别。
SELECT Sname, Ssex
FROM Student
WHERE Sdept NOT IN ('IS','MA','CS');
#查询所有姓刘学生的姓名、学号和性别。
SELECT Sname, Sno, Ssex
FROM Student
WHERE Sname LIKE '刘%';
# 查询姓"欧阳"且全名为三个汉字的学生的姓名。
SELECT Sname
FROM Student
WHERE Sname LIKE '欧阳__';
# 查询DB_Design课程的课程号和学分。使用换码字符将通配符转义为普通字符
SELECT Cno,Ccredit
FROM Course
WHERE Cname LIKE 'DB\_Design' ESCAPE '\ ' ;
# 查询缺少成绩的学生的学号和相应的课程号。
SELECT Sno,Cno
FROM SC
WHERE Grade IS NULL
# 逻辑运算符:AND和 OR来连接多个查询条件。 AND的优先级高于OR,可以用括号改变
优先级。查询计算机系年龄在20岁以下的学生姓名。
SELECT Sname
FROM Student
WHERE Sdept= 'CS' AND Sage<20;
## ORDER BY子句
# 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
SELECT *
FROM Student
ORDER BY Sdept, Sage DESC;
## 聚集函数
# 统计元组个数
COUNT(*)
# 统计一列中值的个数
COUNT([DISTINCT|ALL] <列名>)
# 计算一列值的总和(此列必须为数值型)
SUM([DISTINCT|ALL] <列名>)
# 计算一列值的平均值(此列必须为数值型)
AVG([DISTINCT|ALL] <列名>)
# 求一列中的最大值和最小值
MAX([DISTINCT|ALL] <列名>)
MIN([DISTINCT|ALL] <列名>)
# 查询学生201215012选修课程的总学分数。
SELECT SUM(Ccredit)
FROM SC,Course
WHERE Sno='201215012' AND SC.Cno=Course.Cno;
## GROUP BY子句
# 查询选修了3门以上课程的学生学号。WHERE子句中是不能用聚集函数作为条件表达式,
而是要使用HAVING
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>3;

在这里插入图片描述

3.4.2 连接查询

连接查询:同时涉及两个以上的表的查询。
连接条件或连接谓词:⽤来连接两个表的条件

# 一般格式
[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>
[<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3>
## 等值与非等值连接查询(等值连接的连接运算符为=)
# 查询选修2号课程且成绩在90分以上的所有学生的学号和姓名。
SELECT Student.Sno, Sname
FROM Student, SC
WHERE Student.Sno=SC.Sno
AND SC.Cno='2' AND SC.Grade>90;
## 自身连接:一个表与其自己进行连接,需要给表起别名以示区别。
# 查询每一门课的间接先修课(即先修课的先修课)
SELECT FIRST.Cno, SECOND.Cpno
FROM Course FIRST, Course SECOND
WHERE FIRST.Cpno = SECOND.Cno;
## 外连接:外连接包括左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接FULL JOIN)。外连接会返回两个表中满足连接条件的行,以及没有匹配的行。如果某
一行在一个表中没有匹配项,仍然会在结果集中显示,但是对应的列会包含NULL值。
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno);
## 多表连接
# 查询每个学生的学号、姓名、选修的课程名及成绩
SELECT Student.Sno, Sname, Cname, Grade
FROM Student, SC, Course /*多表连接*/
WHERE Student.Sno = SC.Sno
AND SC.Cno = Course.Cno;

连接操作的执⾏过程:嵌套循环法(NESTED-LOOP)、排序合并法(SORTMERGE)、索引连接(INDEX-JOIN)。

3.4.3 嵌套查询

嵌套查询概述:⼀个SELECT-FROM-WHERE语句称为⼀个查询块。将⼀个查询块嵌套在另⼀个查询块的WHERE⼦句或HAVING短语的条件中的查询称为嵌套查询。
⼦查询的限制:不能使⽤ORDER BY⼦句。

  • 不相关⼦查询:⼦查询的查询条件不依赖于⽗查询。
  • 相关⼦查询:⼦查询的查询条件依赖于⽗查询。
## 带有IN谓词的子查询
# 查询与“刘晨”在同一个系学习的学生。
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname='刘晨');
## 带有比较运算符的子查询:当能确切知道内层查询返回单值时,可用比较运算符(>,<,=,>=,<=,!=或< >)。
# 找出每个学生超过他选修课程平均成绩的课程号。
SELECT Sno, Cno
FROM SC x
WHERE Grade >=(SELECT AVG(Grade)
FROM SC y
WHERE y.Sno=x.Sno);
## 带有ANY(SOME)或ALL谓词的子查询。使用ANY或ALL谓词时必须同时使用比较运算。如:"> ANY"表示大于子查询结果中的某个值
# 查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄
SELECT Sname,Sage
FROM Student
WHERE Sage < ANY (
SELECT Sage
FROM Student
WHERE Sdept= 'CS'
) AND Sdept <> 'CS' ;
## 带有EXISTS谓词的子查询。
# 查询所有选修了1号课程的学生姓名。
SELECT Sname
FROM Student
WHERE EXISTS(
SELECT *
FROM SC
WHERE Sno=Student.Sno AND Cno= '1'
);

3.4.4 集合查询

集合操作的种类:

  • 并操作UNION
  • 交操作INTERSECT
  • 差操作EXCEPT
# 查询计算机科学系的学生与年龄不大于19岁的学生的交集。
SELECT *
FROM Student
WHERE Sdept='CS'
INTERSECT
SELECT *
FROM Student
WHERE Sage<=19

3.4.5 基于派生表的查询

⼦查询不仅可以出现在WHERE⼦句中,还可以出现在FROM⼦句中,这时⼦查询⽣成的临时派⽣表(Derived Table)成为主查询的查询对象。

# 查询所有选修了1号课程的学生姓名,可以用如下查询完成:
SELECT Sname
FROM Student,(SELECT Sno FROM SC WHERE Cno='1') AS SC1
WHERE Student.Sno=SC1.Sno;

3.4.6 Select语句的一般形式

# SELECT语句的一般格式
SELECT [ALL|DISTINCT]
<目标列表达式> [别名] [ ,<目标列表达式> [别名]]FROM <表名或视图名> [别名]
[ ,<表名或视图名> [别名]]|(<SELECT语句>)[AS]<别名>
[WHERE <条件表达式>]
[GROUP BY <列名1>[HAVING<条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]];

聚集函数的⼀般格式:
在这里插入图片描述
WHERE⼦句的条件表达式的可选格式:
在这里插入图片描述
在这里插入图片描述

3.5 数据更新

3.5.1 插入数据

## 插入元组
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >)]
VALUES (<常量1> [,<常量2>]);
# 将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
INSERT
INTO Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES ('201215128','陈冬','男','IS',18);
## 插入子查询结果
INSERT
INTO <表名> [(<属性列1> [,<属性列2>)]
子查询;
# 对每一个系,求学生的平均年龄,并把结果存入数据库
# 第一步:建表
CREATE TABLE Dept_age
(Sdept CHAR(15) /*系名*/
Avg_age SMALLINT); /*学生平均年龄*/
# 第二步:插入数据
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;

3.5.2 修改数据

UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>][WHERE <条件>];
## 修改某一个元组的值
# 将学生201215121的年龄改为22岁
UPDATE Student
SET Sage=22
WHERE Sno=' 201215121 ';
## 修改多个元组的值
# 将所有学生的年龄增加1岁。
UPDATE Student
SET Sage= Sage+1;
## 带子查询的修改语句
# 将计算机科学系全体学生的成绩置零。
UPDATE SC
SET Grade=0
WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept= 'CS' );

3.5.3 删除数据

DELETE
FROM <表名>
[WHERE <条件>];
## 删除某一个元组的值
# 删除学号为201215128的学生记录。
DELETE
FROM Student
WHERE Sno= '201215128';
## 删除多个元组的值
# 删除所有的学生选课记录。
DELETE
FROM SC;
## 带子查询的删除语句
# 删除计算机科学系所有学生的选课记录。
DELETE
FROM SC
WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept= 'CS') ;

3.6 空值的处理

空值的判断:判断⼀个属性的值是否为空值,⽤IS NULL或IS NOT NULL来表⽰。
空值的约束条件:有NOT NULL约束条件的不能取空值,加了UNIQUE限制的属性,不能取空值。码属性不能取空值。
空值的算术运算、⽐较运算和逻辑运算:

  • 空值与另⼀个值(包括另⼀个空值)的算术运算的结果为空值
  • 空值与另⼀个值(包括另⼀个空值)的⽐较运算的结果为UNKNOWN。
  • 有UNKNOWN后,传统⼆值(TRUE,FALSE)逻辑就扩展成了三值逻辑。
# 选出选修1号课程的不及格的学生以及缺考的学生。
SELECT Sno
FROM SC
WHERE Cno='1' AND (Grade<60 OR Grade IS NULL);

3.7 视图

3.7.1 定义视图

## 建立视图
CREATE VIEW
<视图名> [(<列名> [,<列名>])]
AS <子查询>
[WITH CHECK OPTION];
# 建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept= 'IS'
WITH CHECK OPTION;
# 建立信息系选修了1号课程的学生的视图(包括学号、姓名、成绩)。
CREATE VIEW IS_S1(Sno,Sname,Grade)
AS
SELECT Student.Sno,Sname,Grade
FROM Student,SC
WHERE Sdept= 'IS' AND
Student.Sno=SC.Sno AND
SC.Cno= '1';
## 删除视图
DROP VIEW <视图名>[CASCADE];

3.7.2 查询视图

查询视图与查询基本表相同。
关系数据库管理系统实现视图查询的⽅法是视图消解法(View Resolution):进⾏有
效性检查、转换成等价的对基本表的查询、执⾏修正后的查询。

3.7.3 更新视图

# 将信息系学生视图IS_Student中学号”201215122”的学生姓名改为”刘辰”。
UPDATE IS_Student
SET Sname= '刘辰'
WHERE Sno= ' 201215122 ';
# 转换后的语句:
UPDATE Student
SET Sname= '刘辰'
WHERE Sno= '201215122' AND Sdept= 'IS';

更新视图的限制:⼀些视图是不可更新的,因为对这些视图的更新不能唯⼀地有意义
地转换成对相应基本表的更新。

3.7.4 视图的作用

视图能够简化⽤⼾的操作。
视图使⽤⼾能以多种⻆度看待同⼀数据。
视图对重构数据库提供了⼀定程度的逻辑独⽴性。
视图能够对机密数据提供安全保护。
适当的利⽤视图可以更清晰的表达查询。

第四章 数据库安全性

数据库的安全性是指保护数据库以防⽌不合法使⽤所造成的数据泄露、更改或破坏。
系统安全保护措施是否有效是数据库系统主要的性能指标之⼀。
数据库安全性控制的常⽤⽅法:⽤⼾标识和鉴定、存取控制、视图、审计、数据加
密。

4.1 数据库安全性概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.2 数据库安全性控制
⾮法使⽤数据库的情况:

  • 编写合法程序绕过数据库管理系统及其授权机制。
  • 直接或编写应⽤程序执⾏⾮授权操作。
  • 通过多次合法查询数据库从中推导出⼀些保密数据。
  • 系统根据⽤⼾标识鉴定⽤⼾⾝份,合法⽤⼾才准许进⼊计算机系统。
  • 数据库管理系统还要进⾏存取控制,只允许⽤⼾执⾏合法操作。
  • 操作系统有⾃⼰的保护措施。
  • 数据以密码形式存储到数据库中。在这里插入图片描述

4.2.1 用户身份鉴别

系统提供的最外层安全保护措施。⽤⼾标识由⽤⼾名和⽤⼾标识号组成。

  • 静态口令鉴别:静态口令⼀般由⽤⼾⾃⼰设定,这些口令是静态不变的。
  • 动态口令鉴别:口令是动态变化的,每次鉴别时均需使⽤动态产⽣的新口令登录数据库管理系统,即采⽤⼀次⼀密的⽅法。
  • ⽣物特征鉴别:通过⽣物特征进⾏认证的技术,⽣物特征如指纹、虹膜和掌纹等。
  • 智能卡鉴别:智能卡是⼀种不可复制的硬件,内置集成电路的芯⽚,具有硬件加密功能。

4.2.2 存取控制

存取控制机制组成:

  • 定义⽤⼾权限,并将⽤⼾权限登记到数据字典中。⽤⼾对某⼀数据对象的操作权⼒称为权限,DBMS提供适当的语⾔来定义⽤⼾权限,存放在数据字典中,称做安全规则或授权规则。
  • 合法权限检查:⽤⼾发出存取数据库操作请求,DBMS查找数据字典,进⾏合法权限检查。

常⽤存取控制⽅法:

  • ⾃主存取控制(Discretionary Access Control ,简称DAC):C2级,⽤⼾对不同的数据对象有不同的存取权限,不同的⽤⼾对同⼀对象也有不同的权限,⽤⼾还可将其拥有的存取权限转授给其他⽤⼾。
  • 强制存取控制(Mandatory Access Control,简称 MAC):B1级,每⼀个数据对象被标以⼀定的密级,每⼀个⽤⼾也被授予某⼀个级别的许可证,对于任意⼀个对象,只有具有合法许可证的⽤⼾才可以存取。

4.2.3 自主存取控制方法

通过 SQL 的GRANT 语句REVOKE 语句实现。

⽤⼾权限组成:数据对象、操作类型。

定义⽤⼾存取权限:定义⽤⼾可以在哪些数据库对象上进⾏哪些类型的操作。定义存取权限称为授权。在这里插入图片描述

4.2.4 授权:授予与回收

## GRANT语句的一般格式:将对指定操作对象的指定操作权限授予指定的用户
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]TO <用户>[,<用户>]... # PUBLIC是全体用户
[WITH GRANT OPTION]; # 指定则可以再授予,没有指定则不能传播
# 把查询Student表权限授给用户U1
GRANT SELECT
ON TABLE Student
TO U1;
# 把对Student表和Course表的全部权限授予用户U2和U3
GRANT ALL PRIVILIGES
ON TABLE Student,Course
TO U2,U3;
## REVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
# 把用户U5对SC表的INSERT权限收回
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;
## CREATE USER语句格式
CREATE USER <username>
[WITH][DBA|RESOURCE|CONNECT];

数据库管理员:

  • 拥有所有对象的所有权限
  • 根据实际情况不同的权限授予不同的⽤⼾

⽤⼾:

  • 拥有⾃⼰建⽴的对象的全部的操作权限
  • 可以使⽤GRANT,把权限授予其他⽤⼾

被授权的⽤⼾

  • 如果具有“继续授权”的许可,可以把获得的权限再授予其他⽤⼾
  • 所有授予出去的权⼒在必要时⼜都可⽤REVOKE语句收回

CREATE USER语句格式说明

  • 只有系统的超级⽤⼾才有权创建⼀个新的数据库⽤⼾。
  • 新创建的数据库⽤⼾有三种权限:CONNECT、RESOURCE和DBA。
  • 如没有指定创建的新⽤⼾的权限,默认该⽤⼾拥有CONNECT权限。拥有CONNECT权限的⽤⼾不能创建新⽤⼾,不能创建模式,也不能创建基本表,只能登录数据库。
  • 拥有RESOURCE权限的⽤⼾能创建基本表和视图,成为所创建对象的属主。但不能创建模式,不能创建新的⽤⼾。
  • 拥有DBA权限的⽤⼾是系统中的超级⽤⼾,可以创建新的⽤⼾、创建模式、创建基本表和视图等;DBA拥有对所有数据库对象的存取权限,还可以把这些权限授予⼀般⽤⼾
    在这里插入图片描述

4.2.5 数据库角色

数据库⻆⾊:被命名的⼀组与数据库操作相关的权限。

  • ⻆⾊是权限的集合 。
  • 可以为⼀组具有相同权限的⽤⼾创建⼀个⻆⾊。
  • 简化授权的过程。
## 角色的创建
CREATE ROLE <角色名>
# 首先创建一个角色 R1
CREATE ROLE R1;
## 给角色授权
GRANT <权限>[,<权限>]ON <对象类型>对象名
TO <角色>[,<角色>]# 然后使用GRANT语句,使角色R1拥有Student表的 SELECT、UPDATE、INSERT权限
GRANT SELECT, UPDATE, INSERT
ON TABLE Student
TO R1;s
## 将一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]TO <角色3>[,<用户1>][WITH ADMIN OPTION]
# 将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限
GRANT R1
TO 王平,张明,赵玲;
## 角色权限的收回
REVOKE <权限>[,<权限>]ON <对象类型> <对象名>
FROM <角色>[,<角色>]# 可以一次性通过R1来回收王平的这3个权限
REVOKE R1
FROM 王平;

4.2.6 强制存取控制方法

可能存在数据的“⽆意泄露”。
原因:这种机制仅仅通过对数据的存取权限来进⾏安全控制,而数据本⾝并⽆安全性标记。
解决:对系统控制下的所有主客体实施强制存取控制策略。
强制存取控制(MAC)

  • 保证更⾼程度的安全性
  • ⽤⼾不能直接感知或进⾏控制
  • 适⽤于对数据有严格而固定密级分类的部⻔

在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两⼤类。

  • 主体是系统中的活动实体:数据库管理系统所管理的实际⽤⼾,代表⽤⼾的各
    进程。
  • 客体是系统中的被动实体:受主体操纵。⽂件、基本表、索引、视图。
    对于主体和客体,DBMS为它们每个实例(值)指派⼀个敏感度标记(Label)。敏感
    度标记分成若⼲级别:绝密(Top Secret,TS)、机密(Secret,S)、可信
    (Confidential,C)、公开(Public,P)。
    主体的敏感度标记称为许可证级别(Clearance Level),客体的敏感度标记称为密级
    (Classification Level)。
    强制存取控制规则:
  • 仅当主体的许可证级别⼤于或等于客体的密级时,该主体才能读取相应的客体。
  • 仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体。
  • 强制存取控制(MAC)是对数据本⾝进⾏密级标记,⽆论数据如何复制,标记与数据是⼀个不可分的整体,只有符合密级标记要求的⽤⼾才可以操纵数据。
  • 在这里插入图片描述

4.3 视图机制

# 建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明
# 先建立计算机系学生的视图CS_Student
CREATE VIEW CS_Student
AS
SELECT *
FROM Student
WHERE Sdept='CS';
# 在视图上进一步定义存取权限
GRANT SELECT
ON CS_Student
TO 王平;
GRANT ALL PRIVILIGES
ON CS_Student
TO 张明;

4.4 审计(Audit)

什么是审计?

  • 启⽤⼀个专⽤的审计⽇志(Audit Log):将⽤⼾对数据库的所有操作记录在上⾯。
  • 审计员利⽤审计⽇志:监控数据库中的各种⾏为,找出⾮法存取数据的⼈、时间和内容。C2以上安全级别的DBMS必须具有审计功能。

审计事件:

  • 服务器事件:审计数据库服务器发⽣的事件。
  • 系统权限:对系统拥有的结构或模式对象进⾏操作的审计,要求该操作的权限是通过系统权限获得的。
  • 语句事件:对SQL语句,如DDL、DML、DQL及DCL语句的审计。
  • 模式对象事件:对特定模式对象上进⾏的SELECT或DML操作的审计。

审计功能:

  • 基本功能:提供多种审计查阅⽅式。
  • 多套审计规则:⼀般在初始化设定。
  • 提供审计分析和报表功能。
  • 审计⽇志管理功能:防⽌审计员误删审计记录,审计⽇志必须先转储后删除,对转储的审计记录⽂件提供完整性和保密性保护,只允许审计员查阅和转储审计记录,不允许任何⽤⼾新增和修改审计记录等。
  • 提供查询审计设置及审计记录信息的专⻔视图。

AUDIT语句和NOAUDIT语句:

  • AUDIT语句:设置审计功能。
  • NOAUDIT语句:取消审计功能。
# 对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER,UPDATE
ON SC;
# 取消对SC表的一切审计
NOAUDIT ALTER,UPDATE
ON SC;

4.5 数据加密

数据加密:防⽌数据库中数据在存储和传输中失密的有效⼿段。

加密的基本思想:根据⼀定的算法将原始数据—明⽂(Plain text)变换为不可直接识别的格式—密⽂(Cipher text)。

加密⽅法:存储加密、传输加密。
存储加密:

  • 透明存储加密:内核级加密保护⽅式,对⽤⼾完全透明。将数据在写到磁盘时对数据进⾏加密,授权⽤⼾读取数据时再对其进⾏解密。数据库的应⽤程序不需要做任何修改,只需在创建表语句中说明需加密的字段即可。
  • 内核级加密⽅法: 性能较好,安全完备性较⾼。⾮透明存储加密。通过多个加密函数实现。

传输加密:

  • 链路加密:在链路层进⾏加密,传输信息由报头和报⽂两部分组成,报⽂和报头均加密。
  • 端到端加密:在发送端加密,接收端解密。只加密报⽂不加密报头,所需密码
    设备数量相对较少,容易被⾮法监听者发现并从中获取敏感信息。

基于安全套接层协议SSL传输⽅案的实现思路:

  • 确认通信双⽅端点的可靠性:采⽤基于数字证书的服务器和客⼾端认证⽅式,通信时均⾸先向对⽅提供⼰⽅证书,然后使⽤本地的CA 信任列表和证书撤销列表对接收到的对⽅证书进⾏验证。
  • 协商加密算法和密钥:确认双⽅端点的可靠性后,通信双⽅协商本次会话的加
    密算法与密钥。
  • 可信数据传输:业务数据在被发送之前将被⽤某⼀组特定的密钥进⾏加密和消息摘要计算,以密⽂形式在⽹络上传输。当业务数据被接收的时候,需⽤相同⼀组特定的密钥进⾏解密和摘要计算。

4.6 其他安全性保护
推理控制:

  • 处理强制存取控制未解决的问题
  • 避免⽤⼾利⽤能够访问的数据推知更⾼密级的数据
  • 常⽤⽅法:基于函数依赖的推理控制、基于敏感关联的推理控制

隐蔽信道:处理强制存取控制未解决的问题

数据隐私保护:

  • 描述个⼈控制其不愿他⼈知道或他⼈不便知道的个⼈数据的能⼒
  • 范围很⼴:数据收集、数据存储、数据处理和数据发布等各个阶段

第五章 数据库完整性

5.1 实体完整性

5.1.1 实体完整性定义

关系模型的实体完整性:CREATE TABLE中⽤PRIMARY KEY定义。
单属性构成的码有两种说明⽅法 :

  • 定义为列级约束条件
  • 定义为表级约束条件
    对多个属性构成的码只有⼀种说明⽅法:定义为表级约束条件 。

5.1.2 实体完整性检查和违约处理

插⼊或对主码列进⾏更新操作时,关系数据库管理系统按照实体完整性规则⾃动进⾏
检查。包括:

  • 检查主码值是否唯⼀,如果不唯⼀则拒绝插⼊或修改。
  • 检查主码的各个属性是否为空,只要有⼀个为空就拒绝插⼊或修改。
    检查记录中主码值是否唯⼀的⼀种⽅法是进⾏全表扫描,表扫描缺点是⼗分耗时,为避免对基本表进⾏全表扫描,RDBMS核⼼⼀般都在主码上⾃动建⽴⼀个索引。

5.2 参照完整性

5.2.1 参照完整性定义

关系模型的参照完整性定义:

  • 在CREATE TABLE中⽤FOREIGN KEY短语定义哪些列为外码
  • ⽤REFERENCES短语指明这些外码参照哪些表的主码

5.2.2 参照完整性检查和违约处理

  • ⼀个参照完整性将两个表中的相应元组联系起来。
  • 对被参照表和参照表进⾏增删改操作时有可能破坏参照完整性,必须进⾏检
    查。

参照完整性违约处理:

  • 拒绝(NO ACTION)执⾏:不允许该操作执⾏。该策略⼀般设置为默认策略。
  • 级联(CASCADE)操作:当删除或修改被参照表(Student)的⼀个元组造成了与参照表(SC)的不⼀致,则删除或修改参照表中的所有造成不⼀致的元组。
  • 设置为空值(SET-NULL):当删除或修改被参照表的⼀个元组时造成了不⼀致,则将参照表中的所有造成不⼀致的元组的对应属性设置为空值。

5.3 用户定义的完整性

5.3.1 属性上的约束条件

CREATE TABLE时定义属性上的约束条件:

  • 列值⾮空(NOT NULL)
  • 列值唯⼀(UNIQUE)
  • 检查列值是否满⾜⼀个条件表达式(CHECK)

属性上的约束条件检查和违约处理

  • 插⼊元组或修改属性的值时,关系数据库管理系统检查属性上的约束条件是否被满⾜。
  • 如果不满⾜则操作被拒绝执⾏。

5.3.2 元组上的约束条件

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

同属性值限制相⽐,元组级的限制可以设置不同属性之间的取值的相互约束条件。

元组上的约束条件检查和违约处理:

  • 插⼊元组或修改属性的值时,关系数据库管理系统检查元组上的约束条件是否被满⾜。
  • 如果不满⾜则操作被拒绝执⾏。

5.4 完整性约束命名字句

# 完整性约束命名子句
CONSTRAINT <完整性约束条件名><完整性约束条件>
# <完整性约束条件>包括NOT NULL、UNIQUE、PRIMARY KEY短语、FOREIGN KEY短语、CHECK短语等
# 建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。
CREATE TABLE Student
(Sno NUMERIC(6)
CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),
Sname CHAR(20)
CONSTRAINT C2 NOT NULL,
Sage NUMERIC(3)
CONSTRAINT C3 CHECK (Sage < 30),
Ssex CHAR(2)
CONSTRAINT C4 CHECK (Ssex IN ( ‘男’,'女')),
CONSTRAINT StudentKey PRIMARY KEY(Sno)
);
# 修改表中的完整性限制:使用ALTER TABLE语句修改表中的完整性限制
# 修改表Student中的约束条件,要求学号改为在900000~999999之间,年龄由小于30改为小于40
ALTER TABLE Student
DROP CONSTRAINT C1;
ALTER TABLE Student
ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999),
ALTER TABLE Student
DROP CONSTRAINT C3;
ALTER TABLE Student
ADD CONSTRAINT C3 CHECK(Sage < 40);

5.5 断言

SQL中,可以使⽤ CREATE ASSERTION语句,通过声明性断⾔来指定更具⼀般性的约束。可以定义涉及多个表或聚集操作的⽐较复杂的完整性约束。断⾔创建以后,任何对断⾔中所涉及的关系的操作都会触发关系数据库管理系统对断⾔的检查,任何使断⾔不为真值的操作都会被拒绝执⾏。

# 创建断言的语句格式
CREATE ASSERTION<断言名><CHECK 子句>
# 每个断言都被赋予一个名字,<CHECK 子句>中的约束条件与WHERE子句的条件表达式类
似。
# 限制数据库课程最多60名学生选修
CREATE ASSERTION ASSE_SC_DB_NUM
CHECK
(60 >= (select count(*)
/*此断言的谓词涉及聚集操作count的SQL语句*/
From Course,SC
Where SC.Cno=Course.Cno and
Course.Cname ='数据库')
);
# 删除断言的语句格式为
DROP ASSERTION <断言名>;
# 如果断言很复杂,则系统在检测和维护断言的开销较高,这是在使用断言时应该注意的

5.6 触发器

触发器(Trigger)是⽤⼾定义在关系表上的⼀类由事件驱动的特殊过程。

  • 触发器保存在数据库服务器中。
  • 任何⽤⼾对表的增、删、改操作均由服务器⾃动激活相应的触发器。
  • 触发器可以实施更为复杂的检查和操作,具有更精细和更强⼤的数 据控制能⼒。

5.6.1 定义触发器

# CREATE TRIGGER语法格式
CREATE TRIGGER <触发器名>
{BEFORE | AFTER} <触发事件> ON <表名>
REFERENCING NEW|OLD ROW AS<变量>
FOR EACH {ROW | STATEMENT}
[WHEN <触发条件>]<触发动作体>
# 触发器又叫做事件-条件-动作(event-condition-action)规则。
# 当特定的系统事件发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作,否则不执行该动作。规则中的动作体可以很复杂,通常是一段SQL存储过程。

定义触发器的语法说明

  • 表的拥有者才可以在表上创建触发器
  • 触发器名:触发器名可以包含模式名,也可以不包含模式名。同⼀模式下,触发器名必须是唯⼀的。触发器名和表名必须在同⼀模式下。
  • 触发器只能定义在基本表上,不能定义在视图上。当基本表的数据发⽣变化时,将激活定义在该表上相应触发事件的触发器。
  • 触发事件:触发事件可以是INSERT、DELETE或UPDATE。也可以是这⼏个事件的组合,还可以UPDATE OF<触发列,…>,即进⼀步指明修改哪些列时激活触发器。AFTER/BEFORE是触发的时机。
  • 触发器类型:⾏级触发器(FOR EACH ROW)、语句级触发器(FOR EACH STATEMENT)。
  • 触发条件:触发器被激活时,只有当触发条件为真时触发动作体才执⾏;否则触发动作体不执⾏。如果省略WHEN触发条件,则触发动作体在触发器激活后⽴即执⾏。
  • 触发动作体:触发动作体可以是⼀个匿名PL/SQL过程块,也可以是对已创建存储过程的调⽤。如果是⾏级触发器,⽤⼾都可以在过程体中使⽤NEW和OLD引⽤事件之后的新值和事件之前的旧值。如果是语句级触发器,则不能在触发动作体中使⽤NEW或OLD进⾏引⽤。如果触发动作体执⾏失败,激活触发器的事
    件就会终⽌执⾏,触发器的⽬标表或触发器可能影响的其他对象不发⽣任何变化。

5.6.2 激活触发器

触发器的执⾏,是由触发事件激活的,并由数据库服务器⾃动执⾏。⼀个数据表上可能定义了多个触发器,遵循如下的执⾏顺序:

  • 执⾏该表上的BEFORE触发器;
  • 激活触发器的SQL语句;
  • 执⾏该表上的AFTER触发器。

5.6.3 删除触发器

# 删除触发器的SQL语法:
DROP TRIGGER <触发器名> ON <表名>;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值