数据库复习笔记

数据库学习笔记(一)

文章目录

  • 数据库学习笔记(一)
    • 1 绪论
      • 1.1 数据库概述
        • 1.1.1 四个基本概念
        • 1.1.2 数据管理技术发展
        • 1.1.3 数据库特点
      • 1.2 数据模型
        • 1.2.1 两类数据模型
        • 1.2.2 数据模型组成要素
        • 1.2.3 常用数据模型
      • 1.3 数据库系统结构
        • 1.3.1 三级模式结构
        • 1.3.2 二级映像与数据独立性
    • 2 关系数据库
      • 2.1 关系数据结构
        • 2.1.1 关系概念
        • 2.1.2 关系完整性
      • 2.2 关系代数
        • 2.2.1 传统运算
        • 2.2.2 关系运算
      • 2.3 关系演算
        • 2.3.1 元组关系演算语言ALPHA
        • 2.3.2 元组关系演算
    • 3 关系数据库标准语言SQL
      • 3.1 SQL概述
        • 3.1.1 特点
        • 3.1.2 基本概念
      • 3.2 数据定义
        • 3.2.1 模式定义与删除
        • 3.2.2 基本表的定义,修改和删除
        • 3.2.3 索引的建立和删除
      • 3.3 数据查询
        • 3.3.1 单表查询
        • 3.3.2 连接查询
        • 3.3.3 嵌套查询
        • 3.3.4 集合查询
        • 3.3.5 基于派生表的查询
        • 3.3.6 SELECT语句的一般格式
      • 3.4 数据更新
        • 3.4.1 插入数据
        • 3.4.2 修改数据
        • 3.4.3 删除数据
      • 3.5 空值处理
      • 3.6 视图
        • 3.6.1 定义视图
        • 3.6.2 删除视图
        • 3.6.3 查询视图
        • 3.6.4 更新视图
    • 4 数据库安全性
      • 4.1 数据库安全性概述
        • 4.1.1 不安全因素
        • 4.1.2 安全标准
      • 4.2 数据库安全性控制
        • 4.2.1 用户身份鉴别
        • 4.2.2 存取控制
        • 4.2.3 自主存取控制方法
        • 4.2.4 授权与回收
        • 4.2.5 数据库角色
        • 4.2.6 强制存取控制方法
      • 4.3 审计
        • 4.3.1 审计事件
        • 4.3.2 审计功能
        • 4.3.3 AUDIT语句和NOAUDIT语句
      • 4.4 数据加密
        • 4.4.1 存储加密
        • 4.4.2 传输加密
      • 4.5 其他安全性保护
    • 5 数据库完整性
      • 5.1 实体完整性
      • 5.2 参照完整性
      • 5.3 用户定义完整性
        • 5.3.1 属性约束
        • 5.3.2 元组约束
      • 5.4 完整性约束
      • 5.5 断言
      • 5.6 触发器
        • 5.6.1 定义触发器
        • 5.6.2 删除触发器

1 绪论

1.1 数据库概述

1.1.1 四个基本概念

  • 数据:描述事物的符号记录
  • 数据库:长期存储在计算机内,有组织、可共享的大量数据集合,数据特点:永久存储,有组织,可共享
  • 数据库管理系统:计算机系统软件,用于数据管理,
  • 数据库系统:数据库+数据库管理系统+应用程序+数据库管理员

1.1.2 数据管理技术发展

人工管理阶段
文件系统阶段

1.1.3 数据库特点

  1. 数据结构化
  2. 数据冗余度低,共享性高且易扩充
  3. 数据独立性高(物理独立性、逻辑独立性)由二级映像功能保证

1.2 数据模型

1.2.1 两类数据模型

  1. 概念模型(conceptual mode):按用户观点对数据和信息建模,又称信息模型
  2. 逻辑模型和物理模型:逻辑模型面向数据库管理系统的实现,物理模型面向计算机系统。

1.2.2 数据模型组成要素

  • 数据结构:描述数据库的组成对象和对象之间的联系,静态特性描述
  • 数据操作:对数据库中各对象的实例允许执行的操作集合,动态特性描述
  • 数据的完整性约束条件:给定数据模型中 数据及其联系所具有的制约和依存条件

1.2.3 常用数据模型

  • 层次模型(hierarchical model):用树形结构表示各类实体和实体间的联系,自然直观,查询效率高
  • 网状模型(network model):存取效率高,结构复杂
  • 关系模型(relational model):建立在严格的数学概念基础上
  • 面向对象数据模型(object oriented data model)

1.3 数据库系统结构

1.3.1 三级模式结构

  1. 模式(schema):又称逻辑模式,所有用户的公共数据视图,中间层,不涉及物理存储细节和具体应用程序,是数据的逻辑结构和特征描述。
  2. 外模式(subschema):又称子模式或用户模式,是数据库用户能够看见和使用的局部数据的逻辑结构和特征描述,是与特定应用有关的逻辑表示
  3. 内模式(storage schema):一个数据库只有一个内模式,是数据的物理结构和存储方式的描述,是数据在数据库内部的组织方式

1.3.2 二级映像与数据独立性

  • 外模式-模式映像

    模式对应全局逻辑结构,外模式描述局部逻辑结构,一个模式可以对应多个外模式,当模式发生改变时,通过改变外模式-模式映像可以保持外模式不变,即不必修改根据外模式编写的应用程序,从而实现了数据的逻辑独立性

  • 模式-内模式映像

    模式和内模式映像是唯一的,当数据库的存储结构发生改变时,通过数据库管理员修改模式-内模式映像,模式无需改变,可以保证数据与程序的物理独立性。

2 关系数据库

2.1 关系数据结构

2.1.1 关系概念

  1. 域(domain):一组具有相同数据类型的值的集合
  2. 笛卡尔积(cartesian product):若干域中元素为分量构造元组
  3. 域的基数(cardinal number):域中的不同取值个数
  4. 关系(relation):若干域的笛卡尔积的子集,域的个数即为关系的度(degree)
  5. 候选码(candidate key):一组能唯一标识一个元组的属性,其真子集不是候选码,包含候选码的码为超码。
  6. 主码(primary key):被选中的候选码,用于唯一区别元组
  7. 关系模式(relation schema):关系的描述称为关系模式,形式化表示为R(U,D,DOM,F),R是关系名,U是属性名集合,D为属性对应的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合,可以简记为R(U)
  8. 外码(foreign key):关系R中的一组非码属性,是关系S的主码,则称其是R的外码,R称为参照关系,S称为被参照关系

2.1.2 关系完整性

  1. 实体完整性:主属性不能取空值,用于保证每个元组是唯一的,可区分的
  2. 参照完整性:定义了外码与主码之间的引用规则,外码值要么为空,要么与被参照关系中的主码的值对应。
  3. 用户定义完整性:针对具体关系数据库的约束条件

2.2 关系代数

2.2.1 传统运算

  • 并 union R ∪ S R\cup S RS
  • 差 except R − S R - S RS
  • 交 intersection R ∩ S R \cap S RS
  • 笛卡尔积 cartesian product R × S R \times S R×S

2.2.2 关系运算

  • 选择(selection)

    σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = ′ 真 ′ } \sigma_{F}(R) = \{t|t\in R \land F(t)='真'\} σF(R)={ttRF(t)=}

    F为逻辑判别式,含义为从关系中选择使得F成立的元组组成新的关系

  • 投影(projection)
    关系R上的投影,是从R中选出若干属性列组成新关系

    π A ( R ) = { t [ A ] ∣ t ∈ R } \pi_A(R)=\{t[A] |t\in R\} πA(R)={t[A]tR}

    A为R中的属性列表

  • 连接(join)

    $ R{\Join\atop A\theta B}S= {{\stackrel \frown {{t_R}{ t_S}}}|t_R\in R\land t_S\in S\land t_R[A]\theta t_S[B]} $

    由R和S中满足A θ \theta θB关系式的属性列连接而成的关系。A、B为属性列, θ \theta θ代表运算符。

    两种重要的连接:等值连接(equijoin)自然连接(natural join)

    θ \theta θ是等号时,即为等值连接。

    自然连接是特殊的等值连接,要求进行比较的分量必须是同名属性,并在结果中去掉重复的属性列

2.3 关系演算

2.3.1 元组关系演算语言ALPHA

语句基本格式为:

操 作 语 句 工 作 空 间 名 ( 表 达 式 ) : 操 作 条 件 \boxed {操作语句 \quad 工作空间名(表达式): 操作条件} :

表达式用于指定预计的操作对象,可以说关系名或属性名。

操作语句为GET、PUT、HOLD、UPDATE、DELETE、DROP

RANGE 关系名 变量名可以声明元组变量用来代替关系

操作条件中可以添加DOWN/UP 属性名来使得结果降序或升序排列

2.3.2 元组关系演算

元组演算表达式: { t   ∣   ϕ ( t ) } \{t\ |\ \phi(t)\} {t  ϕ(t)} ϕ ( t ) \phi(t) ϕ(t)是元组关系演算公式,由原子公式和运算符组成。

原子公式分类:

  1. R ( t ) R(t) R(t) :R代表关系,t是元组变量,表示t是R中的元组

  2. t [ i ] θ u [ j ] t[i]\theta u[j] t[i]θu[j] :t和u是元组变量,表示t的第i个分量和u的第j个分量满足运算 θ \theta θ

  3. t [ i ] θ c t[i]\theta c t[i]θc c θ t [ i ] c\theta t[i] cθt[i]:c是常量, 表示t的第i个分量和c满足运算 θ \theta θ

3 关系数据库标准语言SQL

3.1 SQL概述

3.1.1 特点

  1. 综合统一,包括了模式数据定义语言模式DDL,外模式数据定义语言外模式DDL,数据存储描述语言DSDDL,数据操纵语言DML

  2. 高度非过程化,无需了解存取路径和操作过程

  3. 面向集合的操作方式

  4. 以同一种语法结构提供多种使用方式

  5. 语言简洁,易学易用,只有九个核心动词:

SQL功能 动词
数据查询 SELECT
数据定义 CREATE,DROP,ALTER
数据操纵 INSERT,UPDATE,DELETE
数据控制 GRANT,REVOKE

3.1.2 基本概念

支持关系数据库三级模式结构,外模式包括若干视图和部分基本表,数据库模式包括若干基本表,内模式八廓若干存储文件。用户使用SQL可以对基本表和视图进行查询或其它操作。

3.2 数据定义

数据定义语句

操作对象 创建 删除 修改
模式 CREATE SCHEMA DROP SCHEMA
CREATE TABLE DROP TABLE ALTER TABLE
视图 CREATE VIEW DROP VIEW
索引 CREATE INDEX DROP INDEX ALTER INDEX

3.2.1 模式定义与删除

--定义
CREATE SCHEMA 模式名 AUTHORIZATION 用户名
--可以后接视图和基本表的定义子语句
--删除
DROP SCHEMA 模式名 CASCADE|RESTRICT
--CASCADE和RESTRICT二选一,前者表示删除该模式下的所有对象,后者则仅在无下属的视图、表对象时执行删除

3.2.2 基本表的定义,修改和删除

--定义
CREATE TABLE 表名 (属性名 数据类型 列级完整性约束,
                 ...
                 属性名 数据类型 列级完整性约束,
                 表级完整性约束
                 );
--修改
ALTER TABLE 表名
ADD COLUMN 列名 数据类型 列级完整性约束 --添加列
ADD 表级完整性约束	--添加约束
DROP COLUMN 列名 CASCADE|RESTRICT	--删除列
DROP CONSTRAINT 完整性约束 RESTRICT|CASCADE	--删除约束
ALTER COLUMN 列名 数据类型;	--修改列
--删除
DROP TABLE 表名 RESTRICT|CASCADE

3.2.3 索引的建立和删除

--建立索引
CREATE [UNIQUE] [CLUSTER] INDEX 索引名 ON 表名 (列名 [ASC|DESC],...列名 [ASC|DESC]);
-- UNIQUE表示唯一索引 CLUSTER 表示聚类索引 ASC|DESC表示索引按照属性值排序的方式
--删除索引
DROP INDEX 索引名;
--修改索引
ALTER INDEX 旧索引名 RENAME TO 新索引名;

3.3 数据查询

所有的数据查询操作,都基于SELECT语句进行

3.3.1 单表查询

  • 查询语句
--查询列
SELECT 列名,列名,...列名 FROM 表名;
--查询列计算值
SELECT 表达式 FROM 表名;
--去重复值
SELECT DISTINCT 查询表达式 FROM 表名;
--查询满足条件的元组
SELECT 查询表达式 FROM 表名 WHERE 限定条件;
  • WHERE子句所满足条件
查询条件 谓词
比较 =, >, <, >=, <=, !=, <>(不等于), !>, !<,
确定范围 BETWEEN 下限 AND 上限,NOT BETWEEN 下限 AND 上限
确定集合 IN 集合(小括号内+元素), NOT IN 集合
字符匹配 LIKE, NOT LIKE 后跟匹配字符串。可含通配符:%为任意长度字符,_表示任意单个字符。
空值 IS NULL, IS NOT NULL
多重条件 ANDD, OR, NOT
  • 聚集函数

    函数形式 功能
    COUNT(*) 统级元组个数
    COUNT( [DISTINCT|ALL] 列名) 统计某一列中值的个数
    SUM( [DISTINCT|ALL] 列名) 计算某一列值的总和
    AVG( [DISTINCT| ALL] 列名) 计算该列平均值
    MAX( [DISTINCT|ALL] 列名 ) 求最大值
    MIN( [DISTINCT|ALL] 列名) 求最小值

3.3.2 连接查询

使用WHERE子句连接两个或更多的表进行查询

连接格式如下:

[表1.列1] 比较运算符 [表2.列2]

[表1.列1] BETWEEN [表2.列2] AND [表2.列3]

当属性名唯一时,可以省略表名前缀

  1. 等值连接查询和非等值连接查询

    连接运算符为=,是等值连接,其他运算符为非等值连接

  2. 自身连接,一表与自身进行连接

  3. 外连接:分为左外连接和右外连接,左外连接列出左边关系中的所有元组,右外连接列出右边关系中的所有元组

  4. 多表连接:先两个表连接 再把结果与第三个表连接

3.3.3 嵌套查询

SELECT语句可以进行嵌套,但是子查询语句不能使用ORDER BY进行排序。

  1. 带有IN谓词的子查询

    子查询的结果作为查询限定的集合

  2. 带有比较运算符的子查询

    子查询结果是确定的可以用来比较的值

  3. 带有ANY(SOME)或ALL谓词的子查询

    ANY(SOME)表示某个,ALL表示所有,当子查询结果有多个时,需要用谓词修饰后才能进行比较运算。

  4. 带有EXISTS谓词的子查询

    带有EXISTS的子查询表示存在量词判断,不返回任何数据,只返回真假

3.3.4 集合查询

SELECT语句的查询结果是元组的集合,因此多个SELECT语句的结果可以进行集合操作,主要包括并UNION,交INTERSECT和差EXCEPT。

3.3.5 基于派生表的查询

子查询同样可以出现在FROM子句,此时子查询生成的临时派生表成为查询的对象。

3.3.6 SELECT语句的一般格式

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

3.4 数据更新

3.4.1 插入数据

  1. 插入元组

    INSERT INTO(属性1,属性2...)
    VALUES (1,值2...);
    
  2. 批量插入子查询结果

    INSERT INTO(属性1,属性2...)
    SELECT 语句;
    

    可以把子查询结果批量插入

3.4.2 修改数据

UPDATESET=表达式,...
WHERE 条件

3.4.3 删除数据

DELETE
FROMWHERE 条件

3.5 空值处理

  1. 空值判断:IS NULLIS NOT NULL
  2. 约束:UNIQUE属性不能为空, 属性约束为NOT NULL的属性不能为空
  3. 空值运算:空值与另一个值的算术运算结果为空值,比较运算结果为UNKNOW,构成三值逻辑。只有逻辑运算为TRUE才能输出。

3.6 视图

3.6.1 定义视图

CREATE VIEW 视图名 [列名,列名...] --列名全省或全写
AS <子查询>  --子查询语句目标不是列名而是表达式时,必须指定列名
[WITH CHECK OPTION] --CHECK OPTION保证视图修改时必须满足子查询中的限定条件

3.6.2 删除视图

DROP VIEW 视图名 [CASCADE]

基本表删除后,导出的视图并没有被删除,需要显式删除

3.6.3 查询视图

同表查询类似,只是关系数据库在执行视图查询语句时,会先根据视图定义把查询语句转换成对基本表的查询,即视图消解

3.6.4 更新视图

同视图查询类似,同样通过视图消解实现对视图的更新,WITH CHECK OPTION 可以保证不修改不满足视图限定条件的数据。

4 数据库安全性

4.1 数据库安全性概述

4.1.1 不安全因素

  • 非授权用户对数据库的恶意存取和破坏
  • 重要或敏感数据泄露
  • 安全环境的脆弱性

4.1.2 安全标准

  • TCSEC 最早
  • CC 现用

4.2 数据库安全性控制

4.2.1 用户身份鉴别

用户标识 = 用户名+用户标识号(UID)

用户身份鉴别:

  • 静态口令鉴别
  • 动态口令鉴别
  • 生物特征鉴别
  • 智能卡鉴别

4.2.2 存取控制

  • 定义用户权限,并将用户权限等级到数据字典中,称为安全规则
  • 合法权限检查,用户执行操作时,先根据安全规则检查权限

4.2.3 自主存取控制方法

通过GRANTREVOKE语句实现。

用户权限由数据库对象和操作类型组成。

4.2.4 授权与回收

--授权
GRANT 权限,权限...ON 对象类型 对象名,对象类型 对象名 TO 用户,用户...
WITH GTANT OPTION   --表示当前被授权用户可以把自己的权限授予其他用户
--回收
REVOKE 权限 ON 对象类型 对象名 FROM 用户

4.2.5 数据库角色

数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。可以简化授权管理。

  • 角色的创建

    CREATE ROLE 角色名
    
  • 角色授权

    GRANT 权限 ON 对象类型 对象名 TO 角色
    
  • 角色赋予

    GRANT 角色 TO 角色 ,用户
    WITH ADMIN OPTION -- 可以给其他用户授权
    
  • 角色权限回收

    REVOKE 权限 ON 对象类型 对象名
    FROM 角色
    

4.2.6 强制存取控制方法

用户不能直接感知或控制。

在强制存取控制中,数据库管理的实体分为主体客体

主体是系统中的活动实体,包括实际用户和代表用户的各个进程。

客体是系统中的被动实体,受主体操控,包括文件、基本表、索引、视图等。

对于所有主体和客体,系统为每个实例指派一个敏感度标记(label)

敏感度标记分为若干级别。

只允许主体读取不高于主体敏感度级别的客体,实现访问控制。

只允许主体写入不低于主体敏感度级别的客体,从而防止主体把高密级的客体信息写入低密级的客体,造成信息泄露。

####4.2.7 视图机制

通过为不同用户定义不同的视图,把数据对象限制在一定范围内,实现安全防护。

4.3 审计

审计功能把用户对数据库的所有操作自动记录下来放入审计日志(audit log)中。审计员理由审计日志监控数据库的各种行为。

4.3.1 审计事件

审计事件分为多个类别:

  1. 服务器事件:数据库服务器发生的事件,服务器的启动、停止、数据库服务器配置文件的重新加载
  2. 系统权限:的对系统拥有的结构或模式对象进行操作的审计,要求该操作的权限是通过系统权限获得的。
  3. 语句事件:对SQL语句的审计
  4. 模式对象事件:对特定模式对象上进行的SELECT或DML操作的审计

4.3.2 审计功能

  • 基本功能:提供多种审计查阅方式
  • 提供多套审计规则
  • 提供审计分析和报表功能
  • 审计日志管理功能
  • 提供查询审计设置及审计记录信息的专门视图

4.3.3 AUDIT语句和NOAUDIT语句

AUDIT语句用来设置审计功能,NOAUDIT语句取消审计功能。

AUDIT|NOAUDIT 操作 ON 审计对象;

4.4 数据加密

4.4.1 存储加密

  1. 透明存储加密:内核级加密,对用户透明,在数据写入磁盘时进行加密,用户只需要在创建语句中说明需要加密的字段
  2. 非透明存储加密:通过多个加密函数实现加密

4.4.2 传输加密

对用户和服务器之间通信进行加密,如链路加密和端到端加密。

链路加密在链路层加密报文和报头,端到端加密在发送多加密报文,接收端解密报文,无需中间节点密码设备。

4.5 其他安全性保护

  • 推理控制:处理强制存取控制不能解决的问题,避免用户通过其能够访问的数据推导出更高密级的数据。
  • 隐蔽信道
  • 数据隐私

5 数据库完整性

5.1 实体完整性

关系模型的实体完整性在CREATE TABLE语句中用PRIMARY KEY定义。单属性主码可以定义为列级约束或表级约束,多属性主码只能定义为表级约束。

在数据插入修改时自动检查主属性是否为空,为空则拒绝插入或修改。

定义方式

--表级约束
CREATE TABLE 表名(属性名 数据类型 列级约束,
...
PRIMARY KEY(属性1,属性2...))--列级约束
CREATE TABLE 表名(属性名 数据类型 PRIMARY KEY...
表级约束)

5.2 参照完整性

  • 定义

    CREATE TABLE 参照表(属性名 数据类型 列级约束,
    ...
    FOREIGN KEY(外码1) 被参照表1(主码),
    FOREIGN KEY(外码2) 被参照表2(主码),     
    );
    
  • 检查

    被参照表删除元组或修改主码,参照表修改外码或插入元组时,检查参照完整性。

5.3 用户定义完整性

5.3.1 属性约束

  1. 列值非空:NOT NULL
  2. 列值为一:UNIQUE
  3. 检查列值是否满足条件表达式:CHECK(表达式)

5.3.2 元组约束

表级约束,CHECK语句约束

5.4 完整性约束

​ 在创建表的约束时,可以给约束条件命名,从而方便后续的修改删除。

  1. 约束命名

    在完整性约束条件前加上CONSTRAINT 约束名

  2. 约束修改

    --删除约束
    ALTER TABLE 表名
    	DROP CONSTRAINT 约束名
    --新增约束
    ALTER TABLE 表名
    	ADD CONSTRAINT 约束名 约束条件
    

5.5 断言

断言可以对多个表相关数据进行约束,任何涉及断言中的关系的操作都需要满足断言条件。

--定义断言
CREATE ASSERTION 断言名 CHECK子句
--删除断言
DROP ASSERTION 断言名

5.6 触发器

触发器(trigger)是用户定义在关系表上的一类由事件驱动的特殊过程,当用户对关系表执行特定操作并满足触发条件时,执行预设语句,因此又叫事件-条件-动作规则

5.6.1 定义触发器

CREATE TRIGGER 触发器名
{BEFORE|AFTER} 触发事件 ON 表名
REFERENCING NEW|OLD ROW AS 变量	--	行级触发器的引用
FOR EACH{ROW|STATEMENT}	--	定义触发器类型
WHEN 触发条件 --可省略
触发动作体
  1. 只有表的创建者才可以在表上创建触发器,一个表上可以创建的触发器数量有限

  2. 触发器名和表名必须在同一模式下,同一模式下触发器名必须唯一

  3. 触发器只能定义在基本表上

  4. 触发事件包括:INSERT、UPDATE、DELETE或动作组合

    可以在触发事件中进一步指明细节,具体到对某一列的修改,例如UPDATE OF 触发列

    1. 触发器类型:FOR EACH ROW代表行级触发器,每影响一行记录就触发一次动作,可以通过NEW |OLD语句在过程体中引用事件发生前的旧值或发生后的新值FOR EACH STATEMENT代表列级触发器,触发后只执行一次动作体

5.6.2 删除触发器

DROP TRIGGER 触发器名 ON 表名

你可能感兴趣的:(数据库系统)