一. 绪论
1. 数据库4个基本概念
-
数据
数据是描述事物的符号记录,是数据库中存储的基本对象。数据的含义称为数据的语义,数据与其语义是不可分的。
-
数据库
所谓数据库就是长期存储在计算机内、有组织的、可共享的大量数据的集合。
数据库中数据基本特点:永久存储、有组织和可共享三个基本特点。数据库中数据都是按照某一种数据模型来组织、描述和存储的。 -
数据库管理系统
数据库管理系统是位于用户和操作系统之间的数据管理软件。数据库管理系统科学地组织和存储数据,高效的获取和维护数据。
其主要功能:
- 数据定义功能,提供数据定义语言(DDL)
- 数据组织、存储和管理功能
- 数据操纵功能,提供数据操纵语言(DML)
- 数据库的事务管理和运行管理
- 数据库的建立和维护功能
- 其他功能(例如通信功能等)
-
数据库系统
数据库系统是由数据库、数据库管理系统(及其应用开发工具)、应用系统和数据库管理员组成的存储、管理、处理和维护数据的系统。
四者关系:数据是基本对象,数据库系统
2. 数据管理
对数据进行分类、组织、编码、存储、检索和维护,它是数据处理的中心问题。数据处理是指对各种数据进行收集、存储、加工和传播的一系列活动的总和。
其发展过程:人工管理阶段、文件系统阶段、数据库系统阶段。
-
人工管理阶段特点
- 数据不保存
- 数据不共享
- 数据不具有独立性
- 应用程序管理数据
-
文件系统阶段特点
- 数据可长期保存
- 数据由专门的软件进行管理
-
数据库系统阶段特点
- 数据结构化(与文件系统的本质区别)
- 共享性高,冗余度低且易扩展
- 数据独立性高(独立性指应用程序与逻辑结构、物理存储相互独立)
- 数据统一管理和控制
使用数据库系统好处体现在:使用数据库系统可以大大提高应用开发的效率。当数据逻辑结构需要改变是,开发人员不必修改应用程序,或者只需要修改很少一部分。使用数据库系统可以减轻DBA维护系统的负担
3. 数据模型
数据模型是数据库用来对现实世界进行抽象的的工具,是数据库中用于提供信息表示和操作手段的形式框架。
数据模型三要素:
(1)数据结构(描述数据库组成对象以及对象之间的联系)。描述的是静态
(2)数据操作(对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则)。描述动态。
(3)数据的完整性约束条件(是一组完整性规则)。
数据模型可以分为:概念模型(实体-联系)、逻辑模型和物理模型。
-
概念模型(实体
联系):具有实体、属性、码、实体型、实体集、联系等概念 -
第二类中的逻辑模型:它是按计算机系统的观点对数据建模,主要用于DBMS实现。分为层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等
第二类中的物理模型:是对数据最底层的抽象。描述了数据在系统内部的表示方式和存取方法,主要是面向计算机硬件系统的。
3.1 层次模型的优点及缺点
优点:
- 数据结构简单清晰
- 查询效率高
- 提供了良好的完整性支持
缺点:
- 现实世界中很多联系时非层次化的
- 程序编写复杂,如果一个节点具有多个双亲节点,只能引入冗余数据。插入删除限制多
- 查询子女节点必须通过双亲节点
- 由于结构严密,层次命令趋向于结构化
3.2 网状模型的优点及缺点
优点:
- 能够更为直接的描述现实世界
- 具有良好的性能,存取效率较高
缺点:
- 结构比较复杂
- 语言复杂,不好掌握使用
- 用户需要了解系统结构的细节,因为联系是通过存取路径实现的
注意:层次模型是网状模型的特例。
3.3 关系模型的优点及缺点
优点:
- 建立在严格的数据概念基础上
- 概念单一
- 存取路径对用户透明,简化工作
缺点:
存取路径隐蔽,导致查询效率不高,为了提升性能,DBMS必须对用户查询请求进行优化
4. 数据库系统的结构
数据库系统模式的概念:模式是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及型(type)的描述,不涉及具体的值。模式的一个具体值称为模式的一个实例。
4.1 数据库系统的三级模式结构
数据库系统内部的体系结构分为:模式、内模式和外模式。
- 模式:模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。是中间层。具体在数据库软件中存放方式
- 外模式:外模式也称用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述。是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。如:当用户查询信息的时候,展现在应用程序界面
- 内模式:也称存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。是数据在物理硬盘中的存储方式
4.2 数据库的二级映像功能与数据独立性
内模式和模式之间有相互转换关系称为:内模式/模式映像
。其特点是模式改变,对映象做修改,可以保证外模式不变,保证了物理独立性。
同样外模式和模式之间也有相互转换关系称为:外模式/模式映像
。其特点是内模式改变(数据库的存储结构改变),对映象做修改,可以保持模式不变,保证了逻辑独立性。
注意:
(1)外模式通常是模式的子集,一个数据库可以有多个外模式。即用户通过视图看到数据只是数据库中的一部分。
(2)同一外模式也可以为某一用户的多个应用系统所使用,但一个应用程序只能使用一个外模式。即一个表可以给多个程序用,但一个应用程序只能用一个表。
(3)外模式是保证数据库安全的一个有力措施,每个用户只能看见和访问所对应的外模式中的数据。数据库中的其余数据不可见。
二. 关系模型
按照数据模型三要素,关系模型由数据结构、关系操作集合和关系完整性约束三部分组成
关系:是单一的数据结构,现实世界的实体以及实体间的各种联系均用关系来表示
逻辑结构:是二维表,从用户角度,关系模型中数据的逻辑结构是一张二维表。
关系模型是建立在集合代数的基础上。
1. 关系
关系是关系模式某一时刻的内容或状态
关系可以有三种类型:基本关系(基本表)、查询结果表、视图表。
2. 关系模式
关系的描述称为关系模式 ,可形式化的表示为
其中
-
关系模式与关系的区别:
关系模式是型;关系是值,是关系模式的实例。例如
是关系模式,而属性组成的表是关系,即某一时刻关系模式的值。 -
关系、关系模式、关系数据库
关系模式:对关系的描述称为关系模式,可以形式化表示为
关系:是关系模式某一时刻的状态或者内容,关系模式是静态的,而关系是动态的。
关系数据库:关系数据库也有型和值之分,型是关系模式,是对关系数据库的描述。值是关系模式在某一时刻对应的关系集合。
3. 关系的操作
基本五种操作有:选择、投影、并、差、笛卡尔积
查询操作: 选择、投影、连接、除、并、差、交、笛卡尔积
数据更新:插入、删除、修改
数据语言的分类:
3.1 关系完整性规则
(1)实体完整性:若属性A是基本关系R的主属性,则属性A不能取空值
(2)参照完整性:若属性F是基本关系R的外码,它与基本关系S的主码K相对应,则对R中的每个元组在F上的值,必须为空值或者S中某个元组的主码值
(3)用户定义完整性:针对某一具体关系数据库的约束条件。它反映了某一具体应用所涉及的数据必须满足的语义要求。
3.2 关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。
在八种运算关系中:并、差、笛卡尔积、投影和选择为基本运算;其他三种运算:交、连接、除均可以用这五种基本运算来表达
并
并的代数运算的结果为二者元组之和去除重复行。
交
交的代数运算的结果为二者的重复行
差
差的代数运算的结果为前者(S1)去除二者重复行
笛卡尔积
笛卡尔积 ,从数学角度理解,就是将集合A和集合B中所有有序对元素集合。在数据库系统中,表示得是对两个关系R和S进行操作,产生的关系中元组个数为两个关系中元组个数之积。
结果的列数为二者属性列数之和,行数为二者元素数乘积。
投影
投影 ,关系R上的投影是从R中选择出若干属性列组成新的关系。
对选择的属性列,列出其对应的元组值
选择
选择又称为限制。它是在关系R中选择满足给定条件的诸元组。
连接
连接可以理解为筛选+笛卡尔乘积
。笛卡尔乘积是固定的,让连接操作变得复杂的,只有筛选
操作,也就是筛选条件
。
如:
自然连接
没有连接条件的连接为自然连接。与之相对的是等值连接。
自然连接:是一种特殊的等值连接。结果列数为二者属性列数之和減去重复列,行数为二者冋名属性列其值相冋的结果元组。笛卡尔积、选择、投影的组合表示可以与自然连接等价。
以上两个关系表
除
首先要了解象集概念:给定一张学生表
在上表中每个分量值都会有它的象集,其本质上是一次选择行的运算和一次选择列的运算。如
关系
-
找出关系
和关系 中相同的属性,找相同列 -
找被除关系
中与关系 中不相同的属性列是 。并在关系 上对属性 做去重投影 -
根据关系
,取 的象集。 -
最后判断包含关系。即关系
中 列的各个值 的像集 是否包含关系 中属性 的所有值 的像集只有 ,不能包含关系 中属性 的所有值,所以排除掉 ;
而的像集包含了关系 中属性 的所有值,所以 的最终结果就是
三. 标准SQL语句
SQL特点:
- 功能综合统一:集数据定义语言、数据操作语言、数据控制语言于一体,可以独立完成数据库声音的周期中的全部活动这就为数据库运营系统开发提供了良好的环境。
- 数据操纵高度非过程化:SQL进行数据操纵时只需要提出"做什么"无序指明"怎么做"。因此不需要了解存储路径,存取路径的选择及SQL的操纵过程由系统自动完成,并且提高了数据的独立性。
- 面向集合的操作方式:SQL采用集合的操作方式,增删改查的对象都可以是元组的集合。
- 以统一的语法结构提供多种使用方式:SQL即是独立语言又是嵌入语言,可以直接用SQL命令对数据库操作,也可以嵌入到其他高级语言中供设计程序时使用。
- 语言简洁,易学易用:设计巧妙,语法简洁,易于学习和使用。
SQL概念:外模式对应视图、模式对应基本表、内模式对应存储文件
1. 数据定义
2. 具体考点
新增一列
alter table 表名 add 列名 数据类型 [约束条件];
alter table student add semail varchar(20);
插入数据
sql插入语句
insert into 表名[(列名1...)] VALUES(常量1....);
insert into student values
('20180009','张三','男','2000-10-1','软件工程');
insert into student(sno,sname,ssex,sbirthdate,smajor) values
('20180010','李红','女','2005-10-1','软件工程');
insert into student(sname,sno) values('王五','20180011'),('20180010','李红','女','2005-10-1','软件工程');
插入子查询的值,子查询:以查询到的结果集合作为插入条件
insert into 表名[(列名1...)] select 子句;
insert into xs select sno from student; #将student表数据插入到sx表中
#insert into xs(sno) select sno from student;
更新子查询
update 表名 set 列名1=值|表达式.... [where 条件];
update student set smajor='软件工程',ssex='男' where sno='20180011';
例题1:将计算机科学与技术专业的学生成绩置
update sc set grade=0 where sno IN
(SELECT sno from student where smajor='计算机科学与技术');
例题2:将选修数据结构的计算机科学与技术专业的同学的生日都改成
update student set sbirthdate='2023-10-8' where smajor='计算机科学与技术'
and sno in(SELECT sno from sc where cno IN
(SELECT cno from course where cname='数据结构'));
Between…and…
[not] between....and....
查询成绩是良好(80-90)的学生的学号,成绩;
select sno,grade from sc where grade between 80 and 90;
#不在80~90之间的学生
select sno,grade from sc where grade not between 80 and 90;
ORDER BY排序
ORDER BY
后面跟列名[表达式],参数asc
升序(默认),desc
降序
在学生表中,将学生的信息按照年龄的升序排列
select * from student ORDER BY year(now())-year(sbirthdate) asc;
select * from student ORDER BY sbirthdate desc; #运行结果同上
将计算机科学与技术的同学按照其选课的平均成绩进行降序排列:
SELECT sno, avg(grade) FROM sc where sno in
(SELECT sno from student where smajor='计算机科学与技术') GROUP BY sno ORDER BY avg(grade) desc;
select * from student where smajor='计算机科学与技术'
order by (select avg(grade) from sc where student.sno=sc.sno GROUP BY sno) desc;
去除重复列
指定列名即可。
查询学生的学号,姓名,课程号,成绩;
select student.sno,sname,cno,grade from student,sc where student.sno=sc.sno;
空值处理
所谓空值就是指不知道,不存在或无意义的值。
空值的判断: is null
,is not null
,<=>
:相等或都等于null
查询先修课为空的课程信息
select * from course where cpno is null;
select * from course where cpno <=> null;
空值的约束格式:列名 数据类型 not null
控制的运算:
- 空值与另一个值(包括空值)的算术运算为空值
- 空值与另一个值(包括空值)的比较运算结果为
UNKNOW
3. 视图
创建视图的语法如下:
create view 视图名 as 子查询 [with check option];
子查询可以是任何select
语句,with check option
表示对视图进行UPDATE
,INSERT
,DELETE
操作时,要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。且视图可以嵌套创建。
创建视图s1
,要求视图中包含学生,课程,学生选课的所有信息
create view s1 as
select student.*,course.*,grade,semester,teachingclass
from student,course,sc where student.sno=sc.sno and course.cno =sc.cno;
创建视图s3
,要求包含计算机专业学生的所有信息,以及对视图的增删改都只能是计算机专业
create view s3 as
select *from student where smajor='计算机科学与技术' with check option;
四. 数据库安全性
数据库安全性是指保护数据库,以防不合法使用所造成的数据泄露,篡改或破坏。
1. 用户身份鉴别
常用的用户身份鉴别方法主要有以下几种:
-
静态口令鉴别
如:账号密码
-
动态口令鉴别
如:动态验证码
-
生物特征鉴别
如:人脸识别
-
智能卡鉴别
如:公交卡
-
入侵检测
2. 授权与收权
-
创建用户
create user 用户名 identified(身份,凭证) by 密码; create user u1@'localhost' identified by 'root';
查看用户名
select user from mysql.user;
-
授权
grant 权限 on 对象类型 表名[列名] to 用户[with grant option]; #给u1用户授权student表的查询和插入操作 grant select on table student to u1@'localhost'; grant insert on table student to u1@'localhost';
查看用户的权限
show grants for u1@'localhost';
将用户
u2
对学生表的查询权限给用户u3
create user u2@'localhost' identified by 'root'; create user u3@'localhost' identified by 'root'; #授权 grant select on student to u2@'localhost' with grant option;
WITH GRANT OPTION
这个选项表示该用户可以将自己拥有的权限授权给别人。切换到用户
u2
#将u2查询权限给u3 grant select on student to u3@'localhost'
-
收回权限
revoke 权限 on 对象类型 表名 from 用户; revoke select on table student from u3@'localhost';
-
数据库角色
create role 角色名; grant 权限 on 表名 to 角色名; revoke 权限 on 表名 from 角色名;
3. 数据加密
数据加密的核心思想是将明文转换为密文。
五. 数据库完整性
数据库完整性是指数据的正确性和相容性。定义、检查、违约处理
1. 实体完整性
关系模型的实体完整性在CREATE TABLE
中用PRIMARY KEY
定义。对于单个属性的约束说明有两种:表级约束和列级约束。
表级约束:在所有属性定义完后定义。列级约束:在每列数据类型之后定义。
对于一个表中有多个主键,则只能定义在表级约束上;如果只有一个主键,则可以定义在表级约束上也可以在列级约束上。
#学生选课表
CREATE TABLE SC
(Sno CHAR(8),
Cno CHAR(5),
Grade SMALLINT,
Semester CHAR(5),
Teachingclass CHAR(8),
PRIMARY KEY (Sno,Cno) #多个主键要定义在表级约束上
);
2. 参照完整性
关系模型的参照完整性在CREATE TABLE
中用FOREIGN KEY
短语定义哪些为外码,用REFERENCES
短语指明外码参照哪些表的主键。参照完整性只能定义在表级约束条件上。外键可以取空值,不为空的话必须是已经存在的某个主键的值。
参照完整性语法格式如下:
FOREIGN KEY(外键名) REFERENCE 参照表(参照列)
定义学生选课表
#学生选课表
CREATE TABLE SC
(Sno CHAR(8),
Cno CHAR(5),
Grade SMALLINT,
Semester CHAR(5),
Teachingclass CHAR(8),
PRIMARY KEY (Sno,Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno)REFERENCES Course(Cno)
);
可能破坏参照完整性的情况及违约处理如下:
被参照表(如student表) | 参照表(如sc表) | 违约处理 |
---|---|---|
可能破坏参照完整性 | 插入元组 | 拒绝 |
可能破坏参照完整性 | 修改外码值 | 拒绝 |
删除元组 | 可能破坏参照完整性 | 拒绝 |
修改主码值 | 可能破坏参照完整性 | 拒绝 |
注意:MySQL中违约处理只有:拒绝和级联两种。
3. 用户定义完整性
在CREATE TABLE
中定义属性的同时,可以根据应用要求定义属性上的约束,即属性值限制,包括:
- 列值非空(
NOT NULL
) - 列值唯一(
UNIQUE
) - 检查列值是否满足一个条件表达式(
CHECK
短语)
CHECK
短语限定了一个列属性的范围
create table stu5(
sno char(8)primary key,
sname char(20) unique not null,
ssex char(2) check (ssex in ('男','女'))
);
限定ssex
的取值只能为男
或女
。
也可以定义在元组上:当学生的性别是男
时,不能以Ms.
开头
create table stu5(
sno char(8)primary key,
sname char(20) unique not null,
ssex char(2),
check (ssex='女' OR sname NOT LIKE 'Ms.%')
);
4. 完整性约束命名子句
以上的完整性约束都在CREATE TABLE
中定义的,MySQL还可以在CREATE TABLE
语句中提供完整性约束命名子句CONSTRAINT
,用来对完整性约束命名,从而可以灵活地增加,删除一个完整性约束。
命令格式如下:
CONSTRAINT <完整性约束名> <完整性约束>
其中<完整性约束>
包括:NOT NULL
、UNIQUE
、PRIMARY KEY
、FOREIGN KEY
、CHECK短语
等。
-
列级上创建(8.0可以正常使用)
create table s1 (sno char(8) constraint c1 check(sno between '00000000' and '299999999'), ssex char(8) constraint c2 check(ssex in('男','女')) );
-
表级约束条件
create table s2 (sno char(8), ssex char(2), constraint c3 check(sno between '00000000' and '299999999'), constraint c4 check(ssex in('男','女')) );
-
修改基本表方式添加
alter table 表名 add constraint 约束名 约束条件; alter table student add constraint c5 check(ssex in('男','女'));
-
删除完整性约束子句
alter table 表名 drop constraint 约束名; alter table student drop constraint c5;
-
修改完整性约束子句
先删除,后新建。
六. 关系数据理论
作为二维表,关系要符合一个最基本的条件是每一个分量必须是不可分的数据项。满足了这个条件的关系模式就属于第一范式。
数据依赖是一个关系属性与属性之间的一种约束关系。其中最主要的函数依赖,即
1. 函数依赖
通常按属性间依赖情况来区分关系规范化程度。
定义:设
平凡函数依赖都是必然成立的,如果不做特殊说明,则讨论的都是非平凡函数依赖。
完全函数依赖(整体确定
如:
部分函数依赖(子集可确定
如:
传递函数依赖(不是子集且
如:
属性关系与依赖:
- 如果两属性集
之间是 联系,则存在函数依赖: - 如果两属性集
之间是 联系,则存在函数依赖: - 如果两属性集
之间是 联系,则存在函数依赖:
2. 范式
关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。一个低一级的范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这个过程叫做规范化
各个范式之间的关系有:
2NF
每一个非主属性完全函数依赖于任何一个候选码。即非主属性通过任何一个候选码确定。
不属于2NF会产生以下几个问题:
- 插入异常
- 删除异常
- 修改复杂
3NF
设关系模式
消除主属性对码的部分和传递函数依赖
BCNF
一个满足BCNF关系模式有:
- 所有非主属性对每一个码都是完全函数依赖
- 所有主属性对每一个不包含它的码也是完全函数依赖
- 没有任何属性完全函数依赖于非码的任何一组属性
若关系模式
①
②且
例题
各级范式消除的依赖
七. 数据库设计
数据库的生命周期可分为两个阶段:一是数据库需求分析和设计阶段;二是数据库实现和运行阶段。
数据库设计步骤:
- 需求分析
- 概念结构设计
- 逻辑结构设计
- 物理结构设计
- 数据库实施阶段
- 数据库运行和维护阶段
1. 数据字典
数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
通常包括:数据项、数据结构、数据流、数据存储和处理。
2. 概念结构设计
应用需求抽象为信息世界的结构
概念模型主要特点:
- 能真实、充分地反映现实世界
- 易于理解
- 易于更改
- 易于向关系、网状、层次等各种数据模型转换
3. 逻辑结构设计与物理结构设计
为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程。
步骤:
- 确定数据库的物理结构
- 对物理结构进行评价
内容包括:关系模式选择存取方法,以及设计关系、索引等数据库文件的物理存储结构