一:数据库系统概论期末复习

1.1分解问题

若要求分解具有无损连接性,那么模式分解一定能够达到4NF。
若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。
若分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。

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

周期性地执行如下操作:建立检查点,保存数据库状态。
具体步骤是:
(1)将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上
(2)在日志文件中写入一个检查点记录
(3)将当前数据缓冲区的所有数据记录写入磁盘的数据库中
(4)把检查点记录在日志文件中的地址写入一个重新开始文件

不同的封锁协议使事务达到的一致性级别不同
封锁协议级别越高,一致性程度越高

1.3数据库系统

1.3.1数据库系统的组成

1、数据库
2、数据库管理系统
3、应用程序
4、数据库管理员

数据库系统是用来存储、管理、处理和维护数据的系统

1.3.2数据库阶段的特点:

1、数据结构化
2、数据共享性高、冗余度低且易扩充
3、数据独立性高
数据独立性包括逻辑独立性和物理独立性
4、数据由数据库管理系统统一管理和控制DBMS的功能
(1)数据的安全性保护
(2)数据的完整性检查
(3)并发控制
(4)数据库恢复

1.3.4数据库系统的组成

1、硬件平台及数据库
2、软件
3、人员

人员包括
1、数据库管理员
2、系统分析员和数据库设计人员

1.3.5三级模式两级映像

外模式:
也称子模式或者用户模式
一个数据库可以有多个外模式
模式:
也称逻辑模型
一个数据库只有一个模式
内模式:
也称为存储模式
一个数据库只有一个内模式

1.3.6数据独立性:

包括物理独立性、逻辑独立性

两个独立性
逻辑独立性
当模式结构改变的时候,只要修改外模式/模式映像即可保持逻辑独立性

物理独立性
当内模式结构改变的时候,只需要修改模式/内模式映像就可以保持物理独立性

1.3.7重点:关系模型

术语
1、关系
一个关系通常来说是一张表
2、元组
表中的一行
3、属性
一列是一个属性
4、码
可以唯一确定一个元组。
比如学号 能确定学生
学号和课程 可以确定成绩
5、域
是属性的取值范围
比如说考驾照的年龄设置为18-60
6、分量
元组中的一个属性值
7、关系模式
是对关系的描述,一般表示为:关系名(属性1,属性2,属性3)

比如学生(学号,姓名,年龄)

关系模型的最基本要求:关系必须规范化,满足一定规范条件。

关系每一个分量必须是一个不可分的数据项,不允许表中还有表

关系模型的完整性约束:

1、实体完整性
主码唯一且非空
2、参照完整性
外码要么为空,要么在另一个表中的主码
3、用户定义完整性
自定定义的,比如年龄在12-30岁之间

二:第一节:绪论

2.1相关概念

​ 1. Data:数据,是数据库中存储的基本对象,是描述事物的符号记录。

(数据种类,文字,图形,图像,音频,视频)
2. Database:数据库,是长期储存在计算机内、有组织的、可共享的大量数据的集合。

(特点:永久存储,有组织,可共享)
​ 3. DBMS:数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,用于科学地组织、存储和管理数据、高效地获取和维护数据。(科学地组织和存储数据,搞笑获取和维护数据)
​ 4. DBS:数据库系统,指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员(DBA)构成。
​ 5. 数据模型:是用来抽象、表示和处理现实世界中的数据和信息的工具,是对现实世界的模拟,是数据库系统的核心和基础;其组成元素:数据结构、数据操作和完整性约束。
6. 概念模型:也称信息模型,是按用户的观点来对数据和信息建模,主要用于数据库设计。
​ 7. 逻辑模型:是按计算机系统的观点对数据建模,用于DBMS实现。(包括网状模型,层次模型,关系模型,面向对象数据模型,对象关系数据模型)层次模型和网状模型统称为格式化模型
​ 8. 物理模型:是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。
9. 实体和属性,码:客观存在并可相互区别的事物称为实体。实体所具有的某一特性称为属性,唯一标识实体店属性集称为码。

实体型:实体名及其属性集合来抽象和刻画同类实体称为实体型。

实体集:同一类型实体集合称为实体集。
​ 10.E-R图:即实体-关系图,用于描述现实世界的事物及其相互关系,是数据库概念模型设计的主要工具。
​ 11.关系模式:从用户观点看,关系模式是由一组关系组成,每个关系的数据结构是一张规范化的二维表。
12.型/值:型是对某一类数据的结构和属性的说明;值是型的一个具体赋值,是型的实例。
13.数据库模式:是对数据库中全体数据的逻辑结构(数据项的名字、类型、取值范围等)和特征(数据之间的联系以及数据有关的安全性、完整性要求)的描述。
14.数据库的三级系统结构:外模式、模式和内模式。
15.数据库内模式:又称为存储模式,是对数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。一个数据库只有一个内模式。
​ 16.数据库外模式:又称为子模式或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图。通常是模式的子集。一个数据库可有多个外模式。
​ 17.数据库的二级映像:外模式/模式映像、模式/内模式映像。

2.2重点知识点

​ 1. 数据库系统由数据库、数据库管理系统、应用系统和数据库管理员构成。

​ 2. 数据模型的组成要素是:数据结构、数据操作、完整性约束条件。

​ 3. 实体型之间的联系分为一对一、一对多和多对多三种类型。

​ 4. 常见的数据模型包括:关系、层次、网状、面向对象、对象关系映射等几种。

​ \5. 关系模型的完整性约束包括:实体完整性、参照完整性和用户定义完整性。

\6. 阐述数据库三级模式、二级映象的含义及作用
数据库三级模式反映的是数据的三个抽象层次: 模式是对数据库中全体数据的逻辑结构和特征的描述。内模式又称为存储模式,是对数据库物理结构和存储方式的描述。外模式又称为子模式或用户模式,是对特定数据库用户相关的局部数据的逻辑结构和特征的描述。

​ 数据库三级模式通过二级映象在 DBMS 内部实现这三个抽象层次的联系和转换。外模式面向应用程序, 通过外模式/模式映象与逻辑模式建立联系, 实现数据的逻辑独立性。 模式/内模式映象建立模式与内模式之间的一对一映射, 实现数据的物理独立性。

三:第二节

3.1关系

关系:单一数据结构(现实世界的实体以及实体之间的各种联系均用关系来表示)

二维表:逻辑结构(从用户角度,关系模型中数据的逻辑结构是一张二维表)

建立在集合代数的基础之上

1.域:域是一种相同数据类型的值的集合。

如:整数,实数,介于某个取值范围的整数,指定长度的字符串集合

2.笛卡尔积(重点)

(1) 笛卡尔乘积,选择和投影运算如下:

给定一组域D1,D2,…,Dn允许其中某些域是相同的。D1,D2,…,Dn的笛卡尔积为:

    

注:所有域的所有取值的一个组合

不能重复

例:给出三种域:

D1:年龄集合={2003,2004};

D2:名字集合={小李,小红};

D3:成绩集合={78,89};

则D1,D2,D3的笛卡尔集合为

D1×D2×D3={(2003,小李,78),(2003,小李,89),(2003,小红,78),(2003,小红,89),(2004,小李,78),(2004,小李,89),(2004,小红,78),(2004,小红,89)}

(2)元祖:笛卡尔积中每一个元素(d1,d2,...,dn)叫作一个n元祖

(3)分量:笛卡尔积元素(,,...,)中每一个值叫作一个分量

(4)基数:若(i=1,2,...,n)为有限集其基数为(i=1,2,...,n),则××...×的基数为·M为:

注:笛卡尔积表示方法:笛卡尔积可表示为一张二维表,表中每行对应一个元祖,每列对应一个域。

3关系

(1)关系:

D1×D2×...×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为:

R(D1,D2,…,Dn)

R:关系名

n:关系的目的或度

(2)单元关系与二元关系:R(,,...,

当n=1时称关系为单元或一元关系

当n=2时称该关系为二元关系

(3)元祖:关系中每个元素是关系中的元祖,通常用t表示。

(4)关系表示:关系也是一个二维表,表的每行对应一个元祖,表的每行对应一个域。

(5)属性:a关系中不同列可以对应相同的域。

b为了区分,必须对每列起一个名字,称为属性。

c:n目关系必有n个属性,n个列

(6)码:

候选码:若关系中某一属性组的值能唯一标识一个元祖,则称该属性为候选码。(候选码只包含一个属性)

全码:关系模式的所有属性组是这个关系模式的候选码,称为全码。

主码:若一个关系有多个候选码,则选定其中一个为主码。

主属性:候选码的诸属性称为主属性,不包含在任何候选码的属性称为非属性。

(7)三类关系:

A:基本关系:实际存在的表,是实际存储数据的逻辑表示。

B:查询表:查询结果对应的表

C:视图表:由基本表或其他视图表导出的表,是虚表,不对应实际数据。

(8)基本关系的性质:

①列是同质的

②不同的列可以出自同一个域(其中每一列称为一个域,不同的属性要给予不同的属性名)

③列和行的顺序随机,列和行的次序可以任意交换。

④任意两个元组的候选码不能相同。

3.2关系模式

3.2.1关系模式含义:

关系模式是对关系的描述(元组构成集合:属性构成,属性来自的域,属性与域之间的关系)

完整约束条件

3.2.2定义关系模式:

关系模式可以表示为:R(U,D,DOM,F)

R:关系名

U:组成该关系的属性名集合

D:U中属性所来自的域

DOM:属性向域的映象集合

F属性间数据的依赖关系的集合

R(U)或R(A1,A2,...,An)

关系模式:对关系的描述,静态的稳定的

关系:关系的模式在某一时刻的状态或内容,动态的,随时间不断变化。

3.2.3关系数据库

关系数据库:在一个给定的应用领域中,所有关系的集合构成一个关系数据库。

关系数据库的型与值:

型:关系数据模式,是对关系数据库的描述

值:关系模式在某一时刻对应的关系的集合,通常称为关系数据库。

3.3关系操作

3.3.1基本的关系操作

常用的关系操作:

查询的关系操作:选择,投影,连接,除,并,差,交,笛卡尔积

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

数据更新:插入,删除,修改

关系操作特点:集合操作方式:操作的对象和结果都是集合,一次一集合的方式

非关系数据模型数据操作方式:一次一记录的方式。

3.5关系完整性

3.5.1实体完整性:

若属性A是基本关系R的主属性,则属性A不能取空值。

空值为“不知道”,“不存在”,“无意义”的值。

3.5.2参照完整性

1:关系间的引用:在关系模型中实体及实体间的联系都是用关系来描述的,存在关系与关系间的引用。

2外码:设F为基本关系R的一组属性,但不是关系R的码,如果 F与基本关系S和Ks相对应,则称F为R的外码。

基本关系R称为参照关系

基本关系S称为被参照关系或目标关系

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

或者取空值(F的每个属性值均为空值)

或者等于S中某个元组的主码值。

3.5.3用户定义完整性

针对某一约束条件,反映某一具体应用所涉及的数据必须满足语义要求。

3.6关系代数

3.6.1关系代数基础

关系代数是一种抽象的查询语言,他对关系运算来表达查询。

关系代数:

①运算对象是关系

②运算结果是关系

③关系代数的运算符:集合运算符和专门的关系运算符。

关系代数运算符:

传统运算集合: 

(1)并

R和S:具有相同的目n(即两个关系都有n个属性),相应属性取自同一个域。

R∪S:仍为n为目关系,由属于R或属于S的元组组成R∪S={t|∈RVt∈S}

(2)差

R和S:具有相同的目n,相应的属性取自同一个域。

R-S:仍为n目关系,由属于R而不属于S的所有元组组成:

(3)交

R和S:具有相同的目n,相应的属性取自同一个域

R∩S:仍为n目关系,由既属于R又属于S的元组组成。

(4)笛卡尔积

R:n目关系,K1个元组

S:m目关系,K2个元组

R×S

列:(n+m)列元组集合

①元组的前n列是关系R的一个元组

②后m列是关系S的一个元组

行:K1×K2个元组

R×S={}

四:第三节:关系数据库标准语言

4.1概述

​ 1. SQL:结构化查询语言的简称, 是关系数据库的标准语言。SQL 是一种通用的、 功能极强的关系数据库语言, 是对关系数据存取的标准接口, 也是不同数据库系统之间互操作的基础。集数据查询、数据操作、数据定义、和数据控制功能于一体。

考试:SQL语言是非过程语言

SQL是关系数据库语言

SQL语言具有数据定义,数据操纵,数据控制的功能。

SQL语言具有两种使用方式,分别称为交互式SQL和嵌入式SQL

建立数据库三级模式的功能由SQL语句的数据定义功能完成。

数据库中只存放视图的是定义

视图的优点:简化查询语句。提高安全性。屏蔽真实表结构安全带来的影响。实现了逻辑数据独立性。

非关系数据模型操纵数据语言“面向过程”

​ 2. 数据定义:数据定义功能包括模式定义、表定义、视图和索引的定义。

​ 3. 嵌套查询:指将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询。

SQL相关知识

​ 1SQL 数据定义语句的操作对象有:模式、表、视图和索引。
​ 2. SQL 数据定义语句的命令动词是:CREATE、DROP 和 ALTER。
​ 3. RDBMS(关系型数据库管理系统) 中索引一般采用 B+树或 HASH 来实现。
​ 4. 索引可以分为唯一索引、非唯一索引和聚簇索引三种类型。

SQL动词:

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

SQL支持关系数据库的三级模式结构:

4.2数据定义:

4.2.1SQL数据定义语句:

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

4.2.1数据定义与删除

4.2.1.1定义模式:定义模式实际上定义了一个命名空间,这个空间可以定义该模式包含的数据库对象,如:基本表,视图索引等。

在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW 和GRANT 字句。

CREATE SCHEMA<模式名>AUTHORIZATION<用户名>[<表定义子句>]|<视图定义子句>|<授权定义子句>]

例:在用户ZHANG创建一个模式TEST,并在其中定义一个TAB1,代码段如下:

CREATE SCHEMA TEST AUTGHORIZATION ZHANG
CREATE TABLE TAB1(COL1 SMALLINT,COL2 INT,COL3 CHAR(20),COL4 NUMERIC(10,3),COL5 DECIMAL(5,2));

 4.2.1.2删除模式

CASCADE(联级)——删除模式的同时把该模式中所有数据库对象全部删除

RESTRICT(限制)——如果该模式定义了下属的数据对象(如表,视图等),则拒绝该删除语句执行。仅当该模式中没有任何下属的对象时才能执行。

DROP SCHEMA<模式名><CASCADE|RESTRICT>

4.3基本表的定义,删除与修改

4.3.1定义基本表

CREATEBTABLE<表名>

(<列名><数据类型>[<列级完整性约束条件>]

[,<列名><数据类型>[<列级完整性约束条件>]]

...

[,<表级完整性约束条件>]);

<表名>:所要定义的基本表的名字

<列名>:组成该表的各个属性(列)

<列级完整性约束条件>:涉及相应属性列的完整性约束条件

<表级完整性约束条件>:设计一个或多个属性列的完整性约束条件

例:建立“学生”表Student。学号是主码,姓名取值唯一。则代码如下:

CREATE BTABLE Student
(Sno CHAR(10)PRIMARY KEY,Sname CHAR(20)UNIQUE,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20)
);

注:执行CREATE TABLE语句后:有关表的定义,约束条件等翻译成内部表示存储在系统的数据字典,在数据库中为基本表分配了(预留了) 存储时间。

4.3.2创建数据库:

create database Student;      --创建数据库

use student;                          --使用数据库

drop database Student;     --删除数据库

注:两种注释方式:(1)两个减号--,注释单行。(2)/**/注行

不能在当前数据库删除当前数据库

4.3.3SQL常用数据类型:

数据类型 描述
integer(size),int(size),smallint(size),tinyint(size) 仅容纳整数,在括号内规定数字最大位数
decimal(size,d),numeric(size,d) 容纳带有小数的数字,size规定数字最大位数,d规定小数点右侧最大位数
char(size) 容纳固定长度的字符串(可容纳字母,数字以及特殊符号),在括号内规定字符串长度
varchar(size) 容纳可变长度的字符串(可容纳字母,数字以及特殊字符),在括号内规定字符串的最大长度
data(yyyymmdd) 容纳日期

​ 4.3.4SQL 创建表语句的一般格式为

​ CREATE TABLE <表名>

​ ( <列名> <数据类型>[ <列级完整性约束> ]

​ [,<列名> <数据类型>[ <列级完整性约束>] ] …

​ [,<表级完整性约束> ] ) ;

其中<数据类型>可以是数据库系统支持的各种数据类型,包括长度和精度。

列级完整性约束为针对单个列(本列)的完整性约束, 包括 PRIMARY KEY、 REFERENCES表名(列名)、UNIQUE、NOT NULL 等。

表级完整性约束可以是基于表中多列的约束,包括 PRIMARY KEY ( 列名列表) 、FOREIGN KEY REFERENCES 表名(列名) 等。

​ 4.4索引的建立与删除

4.4.1SQL 创建索引语句的一般格式为:

​ CREATE [UNIQUE] [CLUSTER] INDEX <索引名>

​ ON <表名> (<列名列表> ) ;

其中UNIQUE:表示创建唯一索引,缺省为非唯一索引;

CLUSTER:表示创建聚簇索引,缺省为非聚簇索引;

<列名列表>:一个或逗号分隔的多个列名,每个列名后可跟 ASC 或 DESC,表示升/降序,缺省为升序。多列时则按为多级排序。

4.4.2SQL修改索引的一般格式为:

ALTER INDEX <旧索引名>RENAME TO<新索引名>

4.4.3SQL删除索引一般格式为:

DROP INDEX<索引名>;

​ 4.5SQL 数据查询

4.5.1SQL数据查询语句的一般格式为

​ SELECT [ALL|DISTINCT] <算术表达式列表> FROM <表名或视图名列表>

​ [ WHERE <条件表达式 1> ]

​ [ GROUP BY <属性列表 1> [ HAVING <条件表达式 2 > ] ]

​ [ ORDER BY <属性列表 2> [ ASC|DESC ] ] ;

其中

ALL/DISTINCT: 缺省为 ALL, 即列出所有查询结果记录, 包括重复记录。 DISTINCT则对重复记录只列出一条。

​ 算术表达式列表:一个或多个逗号分隔的算术表达式,表达式由常量(包括数字和字符串)、列名、函数和算术运算符构成。每个表达式后还可跟别名。也可用 *代表查询表中的所有列。

<表名或视图名列表>: 一个或多个逗号分隔的表或视图名。 表或视图名后可跟别名。

条件表达式 1:包含关系或逻辑运算符的表达式,代表查询条件。

条件表达式 2:包含关系或逻辑运算符的表达式,代表分组条件。

<属性列表 1>:一个或逗号分隔的多个列名。

<属性列表 2>: 一个或逗号分隔的多个列名, 每个列名后可跟 ASC 或 DESC, 表示升/降序,缺省为升序。

4.5.2单表查询

4.5.2.1选择表中若干列

1.查询全部列:

选出所在属性列:①在SELECT关键字后面列出所有列名②将<目标列表达式>指定为*

例:查询全体学生详细信息:

SELECT Sno,Sname,Ssex,Sdept
FROM Student;
或
SELECT*
FROM Student;

2查询经过计算的值

SELECT 子句的<目标列表达式>不仅可以为表中属性列,也可以是表达式

例:查找全体学生的成绩和姓名

SELECT Sname,Sgrade

FROM  Student;

4.5.2.2选择表中若干元组

取消取值重复的行:如果没有指定DISTINCT关键词,则缺省为ALL

指定DISTINCT 关键词,去掉表中重复的行

查询满足条件的元组:

常用查询条件
查询条件 谓词
比较 =,>,<,>=,<=,!>,!<,<>,!=;NOT+上述运算符
确定范围 BETWEEN AND,NOT BETWEEN AND
确定集合 IN,NOT,IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULL
多重条件 AND,OR,NOT

4.5.2.3ORDER BY子句

可以按一个或多个属性排序

升序:ASC;降序:DESC;缺省值为升序

对于空值,排序时显示次序由系统实现来决定

4.5.2.4聚集函数

统计元组个数:COUNT(*)

统计一列中值的个数:COUNT([DISTINC|ALL]<列名>)

计算一列值的总和(此列必为数值型):SUM([DISTINCT|ALL]<列名>)

计算一列值的平均值(此列必为数值型):AVG([DISTINCT|ALL]<列名>)

求一列中的最大值和最小值:MAX([DISTINCT|ALL]<列名>)

MIN([DISTINCT|ALL]<列名>)

4.5.2.5GROUP BY 子句

细化聚集函数的作用对象

如果未对查询结果分组,聚集函数将作用于整个查询结果

对查询结果分组后,聚集函数将分别作用于每个组

按指定的一列或多列分组,值相当为一组。

4.5.3连接查询

连接查询同时涉及两个以上的表的查询。

连接条件或连接谓词:用来连接两个表的条件,其一般格式为:

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

[<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2>AND[<表名2>.]<列名3>

4.5.3.1等值和非等值连接查询

4.5.3.2自身连接

自身连接:一个表与其自己进行连接。

需要给表起别名以示区别。

由于所有属性名为同名属性,因此必须使用别名前缀。

4.5.3.3外连接

外连接操作以指定表连接为主体,将主体表中不满足连接条件的元组一并输出。

左外连接:列出左边关系中的所有元组。

右外连接:列出右边关系中的所有元组。

4.5.3.4多表连接

多表连接:两个以上的表进行连接。

4.5.4嵌套查询

4.5.4.1嵌套查询:一个SELECT-FROM-WHERE语句为一个查询块。

将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短句的条件查询称为嵌套查询

SELECT Sname       /*外层查询/父查询*/
FROM Student
WHERE Sno IN (SELECT Sno   /*内层查询/子查询*/FROM SCWHERE Cno='2');

上层查询块称为嵌套查询或父查询

下层查询块称为内层查询或子查询

SQL语言为多层嵌套查询:一个字查询还可以嵌套为其他子查询。

子查询限制:不能使用ORDER BY子句

不相关子查询:子查询的查询条件不依赖于父查询。

相关子查询:子查询的查询条件依赖于父查询。

4.5.5集合查询

4.5.5.1Group By子句

Group By操作含义是对SELECT-FROM-WHERE查询结果进行分组,Group By指出分组属性。

注:1.使用Group By子句时,SELECT 列表中的非汇总列必须为Group By列表中的项。

2.分组时,所有NULL值分为一组。

3.Group By列表中一般不允许出现复杂的表达式,显示标题以及SELECT列表中的位置标号。

Having子句是对分组的约束。

  Having条件对分组的约束:HAVING中条件一般用于对一些集合函数比较,如COUNT(),除此之外,一般条件应该写在WHERE子句中。

Order By子句

如果指定了SELECT DISTINCT ,那么ORDER By子句中项就必须出现在选择列表中。

注:ORDER BY子句只能用于对最终查询结果的排序,不能对中间结果排序。

任何情况下,ORDER BY 子句只能出现在最后。

对集合操作结果排序时,ORDER BY子句中用数字指定排序属性。

例:

SELECT Sname,Sage,Sdept
FROM Student
UNION ALL
SELECT A_Sname,H_Sage,H_Sdept
FROM History_Student
ORDER BY1;

集合操作:

并操作:UNION

并操作:INTERSECT

差操作:EXCEPT

形式:

<查询块>;

UNION [ALL]

<查询块>

参加UNION操作的各结果表列数 必须相同,对应项的数据类型必须相同。

UNION:将多个查询结果合并起来,系统自动去掉重复元组。

UNION ALL:将多个查询结果合并起来,保留重复的元组。

4.5.6基于派生表的查询

子查询可以出现在WHERE子句中,也可以出现在FROM子句中,子查询生成的临时派生表成为主查询的查询对象。

派生表是一种从查询表达式派生出虚拟结果表的表达式,与其他表一样出现在FROM子句中,派生表存在于外部查询中。使用派生的一般形式如下:

FROM(SELECT*FROM TA WHERE...)AS T

注:如果子查询没有聚集函数,派生表可以不指定属性列,子查询SELECT子句后面的列名为其缺省属性。

4.5.7SELECT语句的一般形式

SELECT语句一般形式:

SELECT[ALL|DISTINCT]

<目标列表达式>[别名][,<目标列表达式>[别名]]

...

FROM<表名或视图名>[别名]

[,<表名或视图名>[别名]]...

|(<SELECT语句>)[AS]<别名>

[WHERE <条件表达式>]

[GROUP BY<列名1>[HAVING<条件表达式>]]

[ORDER BY<列名2>[ASC|DESC]];

目标列表达式格式

(1)*

(2)<表名>.*

(3)COUNT([DISTINCT|ALL]*)

(4)[<表名>.]<属性列名表达式>[.<表名>.]<属性列名表达式>]...

其中<属性列名表达式>可以是属性列,作用于属性列的聚集函数和常量的任意算术运算组成的。

2.聚集函数一格式:

3.WHERE子句的条件表达式                                                                                                                                                                                                                                                                                                                         

4.6数据更新   

4.6.1插入数据     

两种插入方式:  插入元组,插入子查询结果。

4.6.1.1插入元组:将新元组插入指定表中

语句格式:

INSERT

INTO<表名>[(<属性列1>[,<属性列2>...)]

VALUES(<常量1>[,<常量2>]...);

INTO子句:

1.指定要插入数据的表名及属性列

2.属性列的顺序可以与表义中的顺序不一致。

3.没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义的顺序一致。

4.指定部分属性列:插入元组在其余属性列上取空值。

 4.6.1.2插入子查询结果

语句格式:

INSERT

INTO<表名[(<属性列1>[,<属性列2>...)]

子查询;

4.6.2修改数据

修改指定表中满足WHERE子句条件元组。

SET子句给出<表达式>的值用于取代相应的属性列。

如果省略WHERE子句,表示要修改表中所有元组。

语句格式:

UPDATE<表名>

SET<列名>=<表达式>[,<列名>=<表达式>]...

[WHERE<条件>];

4.6.3删除数据

删除指定表中满足WHERE子句条件元组。

WHERE子句

指定要删除的元组

缺省表示要删除表中的全部元组,表的定义仍在字典中。

语句格式:

DELETE

FROM<表名>

[WHERE<条件>];

三种删除方式:

1.删除某一个元组

2.删除多个元组的值

3.带子查询的删除语句

4.7空值处理

4.7.1空值的处理

空值就是“不知道”或不存在或“无意义”的值

一般有以下几种情况:该属性可能有一个值,氮目前不知道它的具体值。

该属性不应该有值。

由于某种原因不便于填写。

4.7.2空值的产生

空值是一个很特殊的值,含有不确定性。对关系运算有特殊问题,需要特殊处理。

4.7.3空值的判断

判断一个属性的值是否为空值,用IS NULL或IS NOT NULL来表示

4.7.4空值约束条件

属性定义中:

有NOT NULL约束条件不能取空值

加上UNIQUE限制的属性不能取空值。

码属性不能取空值。

4.7.5空值运算:

空值与另一个值(包括另一个空值)的算术运算的结果为空值。

空值与另一个值(包括另一个值)的比较运算结果为UNKNOWN。

有UNKNOWN后,传统二值(TRUE,FALSE)逻辑上扩展为三值逻辑。

逻辑运算符真值表
x     y

x AND   y

x   OR   y NOT   x
T     T T T F
T     U U T F
T     F F T F
U     T U T U
U     U U U U
U     F F U U
F     T F T T
F     U F U T
F     F F F T

4.8视图

4.8.1定义视图

4.8.1.1建立视图

语句格式:

CREATE VIEW

<视图名>[(<列名>[,<列名>]...)]

AS<子查询>

[WITH CHECK OPTION];

*WITH CHECK OPTION

对视图进行UPDATE,INSERT和DELETE操作时保证更新,插入或删除的行满足视图定义的谓词条件。

*子查询可以是任意SELECT语句,是否可以含有ORDER BY 子句和DISTINCT短句,则决定具体系统的实现。

*组成视图的属性列名:全部省略·或全部否定。

*关系数据库管理系统执行CREATE VIEW语句时只是把视图定义存入数据字典,并不执行其中SELECT语句。

*在对视图查询时,按视图的定义从基本表中将数据查出。

*定义IS——Student视图加上WITH CHECK OPTION子句,对视图进行插入,修改和删除操作时,RDBMS会自动加上Sdept='IS’的条件。

4.8.1.2删除视图

语句格式定义:

DROP VIEW <视图名>[CASCADE]

*该语句从数据字典中删除指定的视图定义。

*如果该视图导出其他视图 ,使用CASCADE级联删除语句,把该视图和由他导出的所有视图一起删除。

*删除基表时,由该基表导出的所有视图定义都必须显示使用DROP VIEW语句删除。

4.8.2查询视图:

用户角度:查询视图与查询基本表相同

关系数据库管理系统实现视图查询的方法。

视图消解法:

进行有效性检查

转换成对基本表的查询

执行修正后查询

4.8.3更新视图

*允许对行列子集视图进行更新。

*对其他类型视图的更新不同系统有不同限制。

五:第四节数据库的安全性

5.1安全性概述

计算机系统安全:指为计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件,软件和数据,防止因偶然或恶意原因使系统遭到破坏,数据遭到更改或泄露。

计算机系统安全问题分类:

技术安全:防火墙,防篡改

管理安全:软硬件管理,数据备份

政策法律类安全:审查,管理办法

TCSEC/TDI安全级别划分:

安全级别 定义
A1 验证设计
B3 安全域
B2 结构化保护
B1 标记安全保护
C2 受控存取保护
C1 自主安全性保护
D 最小保护

5.2 计算机系统安全性控制:

5.2.1用户标识和鉴定

用户标识,口令

系统提供最外层安全措施保护

系统提供方式让用户表示自己的名字和身份。

5.2.2身份鉴别

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

5.2.3存取控制

定义用户权限,并将其登记到数据字典中。用户对某一数据对象操作称为权限。

合法权限检查:按照安全规则进行权限检查。

自主存取控制(DAC)——GRANT和REVOKE

用户权限的两个因素:数据库对象和操作类型

定义用户存取权限称为授权

强制存取控制(MAC)

对象类型 对象 操作类型
数据库 模式 CREATE SCHEMA
基本表 CREATE TABLE,ALTER TABLE
模式 视图 CREATE VIEW
索引 CREATE INDEX
数据 基本表和视图

SELECT,INSERT,UPDATE,DELETE,REFERENCES,

ALL PRIVILEGES

属性列

SELECT,INSERT,UPDATE,REFERENCES,

ALL PRIVILEGES

5.2.4授权与回收

5.2.4.1GRANT语句(授权)

GRANT<权限>[,<权限>]...    (指定操作)

[ON<对象类型><对象名>]     (指定对象)

TO<用户>[,<用户>]...            (指定用户)

[WITH GRANT OPTION];

5.2.4.2REVOKE语句

REVOKE<权限>[,<权限>]...

[ON<对象类型><对象名>]

FROM<用户>[,<用户>]...;

5.2.5数据库角色

数据库角色:被命名的一组或数据库操作相关的 权限。

角色是权限的集合,可以为一组相同权限的用户创建一个角色,简化授权过程。

一:角色的创建

CREATEB ROLE<角色名>

二:给角色授权

GRANT <权限>[,<权限>]...

ON<对象类型>对象名

TO<角色>[,<角色>]...

三:将一个角色授予其他的用户或角色。

GRANT <角色1>[,<角色2>]...

TO <角色3>[,<用户1>]...

[WITH ADMIN OPTION]

四:角色权限的收回

REVOKE<权限>[,<权限>]...

ON<对象类型><对象名>

FROM<角色>[,<角色>]

5.2.6强制存取控制(MAC)

MAC是指系统为保证更高程度的安全性,按照TDI/TCSEC标准中安全策略要求,所采取的强制存取检查手段。

在MAC中,DBMS所管理的全部实体被分为主体和客体两大类。

主体:在系统中的活动实体,包括DBMS所管理的实际用户,也包括代表用户的各进程。

客体:系统中的被动实体,包括文件,基表,索引,视图等。

DBMS为主体和客体的每个实例指派一个敏感度标记

绝密,机密,可信,公开

主体的敏感度标记称为许可证级别。

客体的敏感度标记称为密级。

强制存取控制规则

(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体。

(2)仅当主体的许可证的密级时,该主体才能写相应的客体。

视图机制

把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。

审计:

审计日志:将用户对数据库的所有操作记录在上面。

DBA利用审计日志:找出非法存取数据的人,时间和内容。

审计分为:用户级审计和系统级审计。

数据加密:

数据加密:防止数据库数据在存储和传输过程中失密的有效手段。

加密方法:替换方法,置换方法,混合方法。

其他安全性保护

推理控制,隐蔽信道,数据隐私。

六:第五节数据库完整性

6.1实体完整性

6.1.1实体完整性定义

关系模型的实体完整性:CREATE TABLE 中用PRIMARY KEY定义

单属性构成的码有两种说明:定义为列级约束条件,定义为表级约束条件。

对多个属性构成的码只有一种说明方法。

例:将Student表中的Sno属性定义为码。

(1)在列级定义主码

CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,Sname CHAR(20) NOT NULL,Ssex CHAR(2),Sage SMALLINT,
);

(2)在表级中定义主码

CREATE TABLE Student
(Sno CHAR(9),Sname CHAR(20) NOT NULL,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY(Sno),
);

实体完整性检查:检查主码值是否唯一,如果不唯一则拒绝或修改。

检查主码的各个属性是否为空,只要有一个为空则拒绝插入或修改。

6.2参照完整性

6.2.1参照完整性定义

在CREATE TABLE 中用FOREIGN KEY 短语定义哪些列为外码

用REFERNCES短语指明这些外码参照哪些表的主码

FOREIGN KEY(属性名)——定义

REFERENCES 被参照表名(被参照表主码)——引用

例关系SC中(Sno,Cno) 是主码。Sno,Cno分别参照Student表的主码和Course表的主码,定义SC参照完整性。

CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(9) NOT NULL,Grade SMALLINT,
PRIMARY KEY(Sno,Cno)2,
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);

参照完整性检查与违约处理

一个参照完整性将两个表中的相应元组联系起来

对被参照表和参照表进行增删改操作时有可能破坏参照完整性,必须进行检查。

参照完整性违约处理

(1) 拒绝(NO ACTION)        执行

(2)级联(CASCADE)操作

当删除或修改被参照表的元组造成了与参照表(SC)不一致,则删除或修改参照表中的所有造成不一致元组。

(3)设置空值(SET-NULL)

当删除或修改被参照表的元组造成了与参照表(SC)不一致,则将参照表中所有造成不一致的元组的对应属性设置为空值。

6.3用户定义完整性

用户定义完整性:针对某一具体应用的数据必须满足的语义要求。

关系数据库管理系统提供了定义和检验用户定义完整性机制,不必由应用程序承担。

6.3.1属性上的约束条件

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

列值非空(NOT NULL)

列值唯一(UNIQUE)

检查列值是否满足一个条件表达式(CHECK)

例1:在定义SC表时,说明Sno,Cno,Grade属性不允许取空值 

CREATE TABLE SC
(Sno CHAR(9)NOT NULL,Cno CHAR(4)NOT NULL,Grade SMALLINT NOT NULL,PRIMARY KEY(Sno,Cno),
...
);

例2:建立部门表DEPT,要求部门名称Dname列值唯一,部门编号Deptno为主码。

CREATE TABLE DEPT
(Deptno NUMERIC(2),Dname CHAR(9) UNIQUE NOT NULL,/*要求Dname列值唯一,并且不能取空值*/Location CHAR(10),PRIMARY KEY(Deptno)
);

例3:利用CHECK指定列值满足的条件,Student表中只允许取“男” 或“女”

CREATE TABLE Student1
(Sno CHAR(9)PRIMARY KEY,Sname CHAR(8)NOT NULL,Ssex CHAR(2) CHECK(Ssex IN('男','女')),/*性别属性Ssex只允许取男或女*/Sage SMALLINT,Sdept CHAR(20)
);

6.3.2元组上的约束条件

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

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

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

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

例:当学生的性别是男时,其名字补位MISS打头

CREATE TABLE Student1
(Sno CHAR(9),Sname CHAR(8) NOT NULL,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY (Sno),
);

6.4完整性约束命令子句

6.4.1完整性约束命令子句

CONSTRAINT<完整性约束条件名><完整性约束条件>

<完整性约束条件>:NOTNULL,UNIQUE,PRIMARY KEY短句,FOREIGN KEY短语,CHECK短句。

例:建立学生登记表Student,要求学号在0-100之间,姓名不为空值,年龄小于20,性别只能是N男或女。

思路:在Student表上建立5个约束条件,包括主码约束StudentKey和C1,C2,C3,C4

CREATE TABLE Student
(Sno NUMERIC(4)CONSTRAINT C1 CHECK(Sno BETWEEN 1 AND 100),Sname CHAR(20)CONSTRAINT C2 NOT NULL,Sage NUMERIC(3)CONSTRAINT C3 CHECK (Sage<20),Ssex CHAR(2)CONSTRAINT C4 CHECK(Ssex IN('男','女')),CONSTRAINT StudentKey PRIMARY KEY(Sno)
);

6.4.2修改表中完整性限制

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

例:修改表Student1中的约束条件,要求学号修改为50-200之间,年龄由20改为小于25

步骤:删除原来的约束条件,再增加新的约束条件。

ALTER TABLE Student1
DROP CONSTRAINT C1;
ALTER TABLE Student
ADD CONSTRAINT C1 CHECK(Sno BETWEEN 50 AND 200),
ALTER TABLE Student
DROP CONSTRAINT C3;
ALTER TABLE Student
ADD CONSTRAINT C3CHECK(Sade<25);

6.5断言

6.5.1创建断言的语句格式

CREATE ASSERTION<断言名>

<CHECK子句>

CREATE ASSERTION 指定约束:

可以定义涉及多个表的或聚集操作的比较复杂的完整性约束

断言不为真值的操作会被拒绝执行

每个断言都被赋予一个名字,<CHECK子句>中的约束条件与WHERE子句的条件表达式相似。

例:限制每一门课程最多60名学生选修

CREATE ASSERTION ASSE_SC_CNUM1
CHECK (60>=ALL(SELECT COUNT(*)FROM SCGROUP BY Cno)
);

6.5.2删除断言的语句格式

DROP ASSERTION<断言名>;

6.6触发器(Trigger)

6.6.1定义触发器

触发器是用户定义在关系表上的一类由事件驱动的特殊过程。

触发器又叫事件-条件-动作规则。

事件发生时,如果条件成立则执行规则中的动作,否则不执行该动作。

语句格式:

CREATE TRIGGER<触发器名>

{BEFORE|AFTER<触发事件>ON<表名>

REFERENCING NEW|OLD ROW AS<变量>

FOR EACH{ROW|STATEMENT}

[WHERE<触发条件>]<触发动作>

CREATE TRIGGER<触发器名>

{BEFORE|AFTER<触发事件>ON<表名>

(1)表的拥有者才可以在表上创建触发器

(2)触发器名

触发器名可以包含模式名也可以不包含模式名;同一模式下,触发器名必须是唯一的;触发器名和表名必须在同一模式下。

(3)表名

触发器只能定义在基本表上,不能定义在视图上。

(4)触发事件

可以是INSERT DELETE或UPDATE,也可以是几个事件的组合;还可以是UPDATE OF<触列,...>,进一步指明修改哪些列的激活触发器。

ALTER/BERORE是触发器的时机

AFTER表示执行之后激活触发器。

BEFORE表示执行之前激活触发器。

(5)触发器类型

行级触发器(FOR EACH ROW)

语句级触发器(FOR EACH STATEMENT)

(6)触发条件

当触发条件为真时触发动作才执行;否则触发动作体不执行。

如果省略WHERE触发条件,则触发动作体在触发器激活后立即执行。

(7)触发体动作

触发动作可以是一个匿名的PL/SQL过程块,也可以是对已创建存储过程的调用

行级触发器:用户在过程体中使用NEW和OLD引用事件之后的新值事件之前的旧值。

语句级触发器:不能在触发动作体中使用NEW或OLD进行引用。

如果触发动作体执行失败,激活触发器的事件就会终止执行。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

数据库系统复习篇——全相关推荐

  1. 最小生成树,回忆复习篇。

    最小生成树,回忆复习篇. 以前听过一遍最小生成树,可惜,当时没弄会.过了几天就全忘了.而如今在做LCA的时候,woc我居然不会最小生成树了. 所以来回忆一下最小生成树. kruskal算法.这个算法的 ...

  2. 半小时复习java全内容

    半小时复习Java全内容 来都来了点个赞呗 o(*≧▽≦)ツ 这段时间要急着考试的同学,可以看我画的重点,目录上有标识,如果时间充裕也可以详细看下去,会很有帮助的.我会用视频加图画来解释.这篇文章中, ...

  3. C语言复习篇之数组与指针

    C语言复习篇之数组与指针 学习了一段时间的嵌入式linux了,学习中有很多的东西需要总结,有经验有教训,我觉得把他写下来会更好,就当做是一种笔记的形式,记录学习中的点点滴滴,不仅仅自己可以经常复习,也 ...

  4. 用不同的姿势求逆序对(复习篇)

    用不同的姿势求逆序对(复习篇) 文章目录 用不同的姿势求逆序对(复习篇) 前言 讲解 归并排序 树状数组 线段树 题目 思路 代码 归并排序求逆序对 树状数组求逆序对 线段树求逆序对 历届试题 小朋友 ...

  5. 计算机网络知识点全面总结(一篇全懂)

    一.计算机网络概述 1.1 计算机网络的分类 按照网络的作用范围:广域网(WAN).城域网(MAN).局域网(LAN):按照网络使用者:公用网络.专用网络. 1.2 计算机网络的层次结构 ​TCP/I ...

  6. 【linux】一篇全面的linux软件包管理的总结

    一篇全面的linux软件包管理的总结 文章目录 一篇全面的linux软件包管理的总结 零.开篇 一.查看软件包信息 (1-1)使用aptitude查看linux系统上安装了哪些软件包. (1-2)使用 ...

  7. 安卓android_rom定制,移植,安卓Android_ROM定制、移植:第一~~八篇(全)

    安卓Android_ROM定制.移植:第一~~八篇(全)把那八篇收费奇高的文章整理了一下,同时也给自己挣点银子 想写点关于安卓ROM的一些教程,也许教程和网上一些类似,不过绝对是我自己的理解以及实战教 ...

  8. NOIP复习篇———动态规划

    NOIP复习篇---动态规划 ------------------------------------------------------------------------------------- ...

  9. NOIP复习篇———贪心

    NOIP复习篇---贪心 --------------------------------------------------------------------------------------- ...

最新文章

  1. !--处理:借款冲销不自动冲减预算--
  2. linux do_irq 报错 代码,linux - 内核函数asm_do_IRQ()中的irq与我在模块中请求的不同 - 堆栈内存溢出...
  3. SimpleDateFormat和DateFormat类不是线程安全的。
  4. Python多任务(2.线程的概念以及组成(创建线程的两种方式))
  5. 广东工业大学专项设计_2020年广东工业大学本科招生计划发布!
  6. CodeProject上的最近几篇关于IronPython技术的文章
  7. pythonimport是拷贝_02Python学习笔记之二.一【import、==和is、深浅拷贝】2019-08-17
  8. 空白世界地图打印版_洪恩识字卡1300字十字帖+绘本,可打印成册
  9. 【文章】你和自己聊过吗?你很重要
  10. 常用sql操作语句实战演示
  11. 为何 linux 要用 tar.gz,而不用 7z 或 zip?
  12. 学习PHP的必备开发工具
  13. ansys toolkit教程_「实用」ANSYS电磁仿真工具推荐,做仿真的你可以试试
  14. LeetCode 分数加减运算
  15. Android 解决华为手机图片底色变绿问题
  16. python爬虫抖音主播_Python 爬取抖音视频
  17. 数据分析十年来电影票房数据
  18. C语言之数组求中位数-封装函数
  19. Detectron 创建blob的过程
  20. 《机器学习》总结与心得

热门文章

  1. struts标签--logic总结
  2. 一个OleDbDataAdapter是否可以负责多张表的更新
  3. 搜索引擎---shodan
  4. MySQL5.6和JVM(1.6)调优
  5. Photoshop CS6完全自学基础知识入门到精通视频教程.docx
  6. c语言与指针——(二)指针变量的定义与赋值
  7. C# 使用 OpenCV 剪切图片中的人物头像
  8. 普惠,生态之形!人人参与共建共享——保险科技生态建设
  9. 聚观早报|苹果版余额宝四天吸金69亿;​微软拟推出私有版ChatGPT
  10. QT Creator 快速入门教程 读书笔记