数据库系统概论
提醒:重点都是加黑的!!!
整理不易,记得点个赞👍
本人整理了数据库系统概论的相关只是,希望能备考的您有所帮助!
参考课本《数据库系统概论(第5版)》
1.绪论
1.1基本概念
1.数据:描述事物的符号记录。广义的数据。P4
2.数据库:长期存储在计算机内部的,有组织的可共享的大量数据的集合。P4
3.数据库管理系统:位于用户和操作系统之间的用于数据管理的软件。P5
4.数据库系统:由数据库,数据库管理员,数据库管理系统,应用程序组成的存储,管理、处理和维护数据的一个系统。P5
5.数据库管理系统的功能:P5
- 数据定义
- 数据操纵
- 数据库的组织,存储和管理
- 数据库的建立和维护
- 数据库的事务管理和运行管理
- 其他功能:例如异构数据库之间的互访
1.2数据模型
1.什么是物理独立性和逻辑独立性?P13课本第一次提及
- 物理独立性:保证应用程序和数据库的物理存储的独立性
- 逻辑独立性:保证应用程序和数据库的逻辑结构的独立性
2.数据保护的措施?P13
注意:区别于安全性和完整性
- 数据库的完整性约束(保证数据的正确性、合法性和相容性)
- 数据库的安全性控制(保护数据以防止不合法的使用导致数据的泄露,修改和破坏)
- 并发控制
- 数据恢复
3.概念模型P16
- 实体:客观存在并可以相互区分的事物。
- 属性:用于描述实体具有的特性。
- 码:唯一标识某一个实体的属性集。
- 实体型:实体名和属性集组成的,用于抽象描述某一类实体。(例:学生(学号,姓名,性别,年龄...))
- 实体集:同一类实体组成的集合。
- 联系:实体之间的关系,一般是指的是实体集之间的关系。(不要写成关系)
- 联系的种类:1:1,1:n,m:n
- 概念模型的表示:ER图,详见第7章
4.数据模型的组成P17-18
- 数据结构
- 数据操作
- 数据的完整性约束
5.关系模型P25
最重要的一种数据模型!!!
- 1.关系模型的数据结构:二维表
- 关系:就是二维表
- 元组:关系的某一行
- 属性:关系的某一列
- 码:唯一标识一条元组。分候选码和主码(主码属于候选码)
- 域:属性的取值
- 分量:元组的某一列
- 关系模式:和实体型是类似。是对关系的描述,表示为关系名(属性集)
- 注意:只要是关系模型就一定是规范化的至少是满足1NF的。非规范化的比如,大表里面嵌套小表。
- 关系模型的数据操作:增删改查样样不少。
- 关系模型的完整性约束:实体完整性,参照完整性和用户自定义的完整性
1.3数据库系统的结构
1.型:是实体型,关系模式都是类型的概念。P27
2.值:和实体集差不多含义。P27
3.模式:全体数据逻辑结构的描述。仅仅涉及到型不涉及值。P27
4.实例:具体的值。P278
5.模式和实例的对比:
- 模式一般是固定的,实例是变化的
6.三级模式结构:P28
- 内模式:即物理存储结构。存储模式。
- 模式:即全体型。全体数据逻辑结构和特征的描述。
- 外模式:部分型。用户模式,子模式。局部数据逻辑结构和特征的描述。
注意:模式和内模式都是只有一个,外模式多个。
7.二级映像:内模式/模式映像和模式/外模式映像。P28
8.如何保证数据的逻辑和物理独立性?P30
靠的就是二级映像。
- 当模式发生变化时,DBA对外模式/模式映像做出相应的改变,使得外模式不发生变化,应用程序是在外模式上编写的,从而使得应用程序不发生变化,从而保证了数据的逻辑独立性。
- 当存储结构发生变化时,DBA对内模式/模式映像做出相应的改变,使得模式不发生变化,从而使得应用程序不发生变化,从而保证了数据的物理独立性。
2.关系数据库
2.1关系的数据结构
1.关系:二维表。P38
2.域:属性的取值范围。P38
3.笛卡尔积:这个是广义的。P38
比如关系R有n行n列,关系S有m行m列。RxS结果?
n*m行,n+m列
4.目:或度。属性的个数。P40
5.t:表示元组。P40
6.R表示关系的名称。P40
7.候选码:可以唯一标识一条元组。完全的函数依赖(后面有)。P40
8.主属性:候选码的诸属性就是。P40
9.非主属性:非候选码的属性。P40
10.码:是从候选码中挑选出来的。P40
11.全码:属性全是候选码。P40
12.关系的三种基本类型:你肯定不知道。P41
- 基本表
- 查询表
- 视图
13.关系模式:关系模式是型,关系是值。关系模型是对关系的描述。关系模型是静态的,关系是动态的。P41
2.2关系操作
1.主要操作:增删改查。P43
2.本章重点在关系代数。选择,投影,并,差,笛卡尔积五种基本操作。P43
3.关系操作的特点:对集合的操作。操作的对象和结果都是集合。P44
4.关系代数语言:关系代数和关系演算。P44
2.3关系模型的完整性约束
提醒:完整性都是属性间的关系!!!
1.实体完整性:概括为主键。主键唯一且不能为空。P45
2.参照完整性:概括为外码。假设存在关系R和S,F是R的属性,但不是码,K是S的码,且F和K相关联,那么F称为关系R的外键。P45
- 外码不一定和对应的码重名
- 外码对应的码可能是同一个表。
3.用户自定义的完整性:概括为check,unique约束。特殊需要。P46
2.4关系代数(重点)
1.选择:和select差不多,选出的是符合条件的元组。P51
2.投影:和select差不多,选出的是符合条件的某几列。默认去掉相同的元组。P51
3.并,交,差,笛卡尔积。P49。自己看吧。
4.连接:P53-54。
- 等值连接
- 非等值连接
- 自然连接:去掉相同列。(考试必用)
5.除:明白象集,明白保留谁,去掉谁。主要用来做比如说,查询学生表中至少选修了龙小珍选修的课程,或者说查询学生表中选修了全部课程的学生。P55-56。
6.P71-72的作业题。考试考察的重点。
3.SQL语言
3.1基本概念
1.SQL是高度非过程化的语言。集数据查询DQL,数据操纵DML,数据定义DDL,数据控制DCL于一体的。P76。
3.2数据定义
1.什么是数据定义?创建模式,表,视图,索引都是数据定义做的事情。P80
3.2.1表的操作
1.定义表P82
CREATE TABLE student(
StuNo CHAR(10) PRIMARY KEY,
StuName CHAR(10),
Stuage CHAR(2)
);
2.删除表P85
DROP TABLE IF EXISTS student;
DROP TABLE student;
带IF EXISTS删除只是比较安全。
3.修改表P85
(1)添加新的列:
ALTER TABLE student ADD stuSex CHAR(2);
(2)删除列:
ALTER TABLE student DROP stuSex;
(3)修改列的数据类型:MODIFY COLUMN
ALTER TABLE student MODIFY COLUMN Stuage SMALLINT;
(4)修改列的名称:change
ALTER TABLE student CHANGE Sex StuSex CHAR(2);
(5)添加约束
ALTER TABLE student ADD CHECK(Stuage <100) ;
ALTER TABLE student ADD UNIQUE (StuName) ;
3.2.2索引的操作
1.创建索引:P88
CREATE UNIQUE INDEX stuNa(索引的名称) ON student表名(StuName属性列) ;
2.删除索引:P88
DROP INDEX stuNa ON student;
ALTER TABLE student DROP INDEX stuNa ;
3.修改索引的名字:P89
ALTER TABLE student RENAME INDEX stuNa TO sName ;
3.3数据查询(SQL的重点)
1.基本的语法P89
select all/distinct from 表/视图/临时表 where 筛选的条件 group by 分组的依据 order by 排序 limit 起始位置,挑几个;
2.where的查询条件P93
3.字符匹配P94-95
当出现转义的时候的语句,注意MySQL不允许用\进行转义!!!
SELECT * FROM student WHERE StuName LIKE '张三/_%' ESCAPE '/';
4.聚集函数P97
5.group by和having 。P98-99
注意:having 用于组,筛选出满足条件的组。
SELECT * FROM student GROUP BY StuNo HAVING COUNT(*)>5;
6.连接查询P99
- 自身连接P101
- 外连接P102
- 多表连接P103
注意:一定要区分相同的属性。
7.嵌套查询P103
- 相关子查询:子查询的查询条件依赖于父查询。P104
- 不相关子查询:子查询的查询条件不依赖于父查询。P105
- 带IN的嵌套查询。P103
- 带比较运算符的查询。P106
- 带有ANY或ALL的查询。P107
- 带EXISTS的查询,最难理解的。P109
- 常见的题目:查询选修了全部课程的学生姓名
- 查询至少选修了学号为202101选修的全部课程
- 没有选修1号课程的学生姓名
8.基于派生表的查询:from 后面紧跟派生表。P113
9.select语句格式的大总结。P114-115
3.4数据更新
1.insert
第一种插入方式:P116
INSERT INTO student() VALUES('001','张三',15,'男');
INSERT INTO student() VALUES('002','李四',10,'男');
第二种插入方式:将基本表的数据插入进去。P117。不带value。
注意:就是把原来的values变成了一条SQL语句。
INSERT INTO student(StuNo,StuName) SELECT * FROM user;
2.update。P117
UPDATE student SET StuSex='女' WHERE StuNo='004';
3.delete
DELETE FROM student WHERE StuNo='005';
扩展:truncate可以删除某个表所有的数据,快。
TRUNCATE TABLE user;
3.5空值处理
1.is null和is not null语句。P119
2.MySQL的ifnull函数可以将为空的值给定一个自定义的值。ifnull(str,newStr)
3.6视图
1.定义:由一个或者多个基本表导出的表。P121
2.视图和基本表的区别:视图在数据字典中只保存视图的定义而不保存数据,数据仍然在原来的基本表中。
3.定义视图:P121
CREATE VIEW student_boy AS SELECT * FROM student WHERE StuSex='男' (WITH GRANT OPTION);
4.行列子集视图:P122。一个视图由单个基本表导出,去掉了部分属性但是保留了主码。
5.分组视图:带有GROUP BY的视图
6.删除视图:P124。
DROP VIEW student_boy ;
7.查询视图:P124。
需要转换成对基本表的查询(视图消解)。行列子集视图都是可以转换的,非行列子集视图一般是不可以的。
8.更新视图:P126。
最终是对基本的更新。
要想插入的数据是视图指定范围内的,就需要在视图定义的时候带上WITH CHECK OPTION。
一般的行列子集视图是可以更新的,更新是受限的。
9.视图的作用:P128-129
- 简化用户操作
- 从不同角度看数据
- 保证了一定的逻辑独立性
- 清晰表达查询
- 一定程度上保证了数据的安全性
4.数据库的安全性
4.1概述
1.数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改和破坏。P133
2.数据库的安全级别:7个。P135
- C1就达到了自主安全保护(自主存取控制)
- B1达到了标记安全保护的级别(审计,强制存取控制,算是真正意义上的安全产品)
4.2数据库的安全性控制
1.数据库的安全性:用户身份鉴别,存取控制,审计,视图,数据加密
2.自主存取控制:通过grant和revoke来实现。P140
3.用户权限组成:数据库对象和操作类型。P140
4.创建用户:create user。P145
CREATE USER u1 IDENTIFIED WITH mysql_native_password BY '123456';
5.删除用户:drop user。P145
DROP USER u1;
6.授权。P141
GRANT ALL PRIVILEGES ON review TO u1 WITH GRANT OPTION;
注意:一次只能给一个表授权,可以一次给多个用户进行授权,MySQL没有public
7.权限回收
REVOKE ALL PRIVILEGES ON review FROM u1 ;
8.强制存取控制。P148
- 当主体的许可证级别大于或等于客体的密级时,该主体才可以读取相应的客体
- 当主体的许可证级别小于或等于客体的密级时,该主体才可以写取相应的客体
强制存取控制是对数据本身进行密级标记。
4.3视图机制。
1.原理:把要保密的数据隐藏起来。P149
4.4审计
1.将用户操作数据库的行为记录在审计日志文件中。P149
4.5数据加密
1.存储加密和传输加密:明文和密文。P151
5.数据库的完整性
1.数据库的完整性:指的是数据库的相容性,完整性。P157
2.数据库的完整性和安全性的区别:P157
- 数据库的安全性是保护数据库以防止不合法操作造成数据的泄露、更改和破坏。
- 数据库的完整性指的是数据的相容性和正确性。
- 数据库的完整性是保证数据库中不会出现不合语义的和不正确的数据。
- 数据库的安全性是防止非法用户对数据库的非法操作。
5.1实体完整性
5.1.1定义实体完整性
1.定义主码。P158
- 列级
- 行级
-- 行级
DROP TABLE IF EXISTS student;
CREATE TABLE student(
StuNo CHAR(10) PRIMARY KEY,
StuName CHAR(10),
Stuage CHAR(2)
);
-- 列级
CREATE TABLE student(
StuNo CHAR(10),
StuName CHAR(10),
Stuage CHAR(2),
PRIMARY KEY(StuNo)
);
-- 可以用CONSTRAINT进行完整性的起名字
DROP TABLE IF EXISTS student;
CREATE TABLE student(
StuNo CHAR(10) ,
StuName CHAR(10),
Stuage CHAR(2),
CONSTRAINT stuPr PRIMARY KEY(StuNo)
);
5.1.2实体完整性违约处理
1.检查主码是否唯一?是否为空?
- 不唯一或空:拒绝执行
5.2参照完整性
5.2.1定义参照完整性
1.外码:P160
DROP TABLE IF EXISTS student;
CREATE TABLE student(
StuNo CHAR(10) ,
StuName CHAR(10),
Stuage CHAR(2),
Cno CHAR(10),
PRIMARY KEY(StuNo),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
5.2.1参照完整性违约处理
1.常见的违约处理:P161
- 拒绝执行NO ACTION (默认)
- 级联操作CASCADE
- 设置为NULL
DROP TABLE IF EXISTS student;
CREATE TABLE student(
StuNo CHAR(10) ,
StuName CHAR(10),
Stuage CHAR(2),
Cno CHAR(10),
PRIMARY KEY(StuNo),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
-- 注意下面之间是没有分号相隔的
ON DELETE CASCADE
ON UPDATE CASCADE
);
5.3用户自定义的完整性
1.常见的用户自定义的完整性:P163
- 列值不为空not null
- 列值唯一unique
- check约束
-- 以下均包含
DROP TABLE IF EXISTS student;
CREATE TABLE student(
StuNo CHAR(10) ,
StuName CHAR(10) UNIQUE ,
Stuage CHAR(2) CHECK(Stuage<100),
StuPhone CHAR(10) NOT NULL,
Cno CHAR(10) ,
PRIMARY KEY(StuNo),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
5.4完整性约束名字子句
1.完整性约束名字子句:就是给约束起一个名字。P165
2.创建完整性约束命名子句。P165
注意:并不是每个都可以创建的像NOT NULL就是不可以的。课本的仅供参考的。
DROP TABLE IF EXISTS student;
CREATE TABLE student(
StuNo CHAR(10) ,
StuName CHAR(10) UNIQUE ,
Stuage CHAR(2) CONSTRAINT ageC CHECK(Stuage<100),
StuPhone CHAR(10) NOT NULL,
Cno CHAR(10) ,
CONSTRAINT stukey PRIMARY KEY(StuNo),
CONSTRAINT stuforkey FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
3.删除完整性约束子句。P166
ALTER TABLE student DROP CONSTRAINT sexC ;
4.添加新的完整性约束子句。P1666
ALTER TABLE student ADD CONSTRAINT sexC CHECK(Stuage IN ('男','女'));
5.5触发器
1.触发器:是用户定义在关系表上的一类由事件驱动的特殊过程。P168
2.定义触发器:P169
-- 当插入一个学生的信息自动选上课程001
DROP TRIGGER IF EXISTS select_Stu;
CREATE TRIGGER select_Stu
BEFORE INSERT ON student
FOR EACH ROW
BEGIN
SET new.Cno='001';
END;
3.删除触发器:P172
DROP TRIGGER select_Stu;
5.6存储过程
1.存储过程:SQL语句经过编译和优化存储在数据库的服务器中的。P256
2.存储过程的优点:P256
- 降低了客户和主机之间的通信量
- 提高了效率
- 实现了代码的复用
- 安全性:可以防止sql注入
3.存储过程的缺点:
- 更新繁琐
- 可移植性差
4.创建存储过程
-- 存储过程的创建
CREATE PROCEDURE select_all ()
BEGIN
SELECT * FROM student;
END;
-- 存储过程的调用
CALL select_all ();
5.删除存储过程
DROP PROCEDURE select_all;
6.关系数据理论
6.1概述
1.R(U,F)。P177
- R是关系名
- F是数据依赖
2.常见的关系模式的问题:P179
- 数据冗余
- 更新异常
- 插入异常
- 删除异常
3.好的关系模式:不会发生插入异常,删除异常和更新异常,有很少的数据冗余。P179
6.2规范化
1.函数依赖。P180-181
- 平凡函数依赖:X->Y,且Y是X的子集
- 非平凡函数依赖:X->Y,且Y是不X的子集
- 直接函数依赖:X->Y,Y->X
- 完全函数依赖:X->Y,且X的子集不能推出Y
- 部分函数依赖:X->Y,且X的子集能推出Y
- 传递函数依赖:X->Y,Y->Z,且满足Y不是X的子集,Z不是Y的子集且Y不能推出X(防止出现直接函数依赖)
2.码。设K<U,F>,K是属性或属性集。P181
- 超码:U函数依赖于K
- 候选码:U完全函数依赖于K
- 码:候选码和主码
- 主属性:候选码中的属性
- 非主属性:不是候选码中的属性
- 全码:所有的属性都是候选码
候选码属于超码,但是候选码的真子集一定不是超码,超码不一定是候选码。
3.范式。P182-188
- 1NF:每一个属性都是不可再分的数据项。
- 2NF:在1NF的基础上,不存在非主属性对主属性的部分函数依赖。
- 3NF:在2NF的基础上,不存在非主属性对主属性的传递函数依赖。
- BCNF:在3NF的基础上,不存在主属性对主属性的部分和传递函数依赖。
4.规范化小结:P189。每一种范式都是解决了一个什么样的问题。
6.3数据依赖公理
1.公理。P190
- 自反
- 增广
- 传递
- 合并
- 伪传递
- 分解
2.求属性集X关于函数依赖集F的闭包,也可以用来求主码。P191
3.求主码的时候要保证其子集不能当码。也就是说是一个极小的函数依赖集。P193
7.数据库设计
7.1概述
1.数据库设计:给定一个应用环境,设计出一个有效存储和管理数据的应用系统。P205
2.数据库设计的方法:P207
- ER模型
- UML统一建模语言
- 三范式
- 面向对象的方法
3.数据库设计的基本步骤。P207
- 需求分析:数据库需求规格说明书
- 概念设计:ER模型
- 逻辑设计:转换成表
- 物理设计:物理结构
- 数据库实施:环境
- 运行和维护
4.概念模型的特点:P215
- 真实的反映现实的世界,并能反映事物之间的联系
- 易于理解
- 易于更改
- 易于向多种数据模型转换
7.2概念模型
5.概念结构模型中的划分标准:P224
- 属性不可再分
- 属性不能和其他的实体具有联系
6.ER图集成常见的问题:P228
- 属性冲突:属性值的类型,取值范围,属性值得单位等
- 命名冲突:同名异义,异名同义
- 结构冲突:取并集
7.消除冗余的方法:P229
- 数据流图
- 数据字典
7.3逻辑模型
1.逻辑模型:就是将概念模型转变为逻辑模型。
2.转换的关键:如何确定属性和码?P232
- 1:1的转换:建立新的关系模式或与某一端合并
- 1:n的转换:建立新的关系模式或与n端合并
- n:m的转换:建立新的关系模式
- 三个以上的转换:建立新的关系模式
以尽量减少连接为标准,根据现实的需要进行设计。
10.数据库恢复技术
1.数据保护的措施:回顾
- 数据库的安全性
- 数据库的完整性
- 数据恢复
- 并发控制
10.1事务
1.事务:事务是用户定义的一个数据库操作序列,要么全做,要么全不做,是一个不可分割的基本单位。P293
2.事务的特性:ACID。P294
- 原子性:每一个事物都是不可分割的最小单位。
- 一致性:事务前后处于一致的状态。
- 隔离性:事务之间是互不干扰的。
- 持久性:事务提交后对数据的改变是永久的。
10.2故障的种类
1.故障的种类:P295-296
- 1.事物内部的故障:undo
- 2.系统故障:redo和undo
- 3.介质故障:备份,重转数据库
- 4.计算机病毒
10.3恢复技术的实现
1.数据转储和登记日志文件。P297
2.四种转储方式:P298
3.登记日志文件:记录事务对数据库更新操作的文件。
11.并发控制
11.1概述
1.并发控制保证了事务的隔离性和一致性。P310
2.并发操作带来的问题:P310
- 丢失修改:两个事务对同一个数据进行修改。
- 不可重复读:T1读,T2改,T1读。
- 读“脏”数据:T1改,T2读,T1回滚
3.并发控制的措施:P311
- 封锁:X和S锁
- 时间戳
- 乐观控制fa
11.2封锁
1.X和S锁:P312
11.3封锁协议
1.一级封锁协议:解决丢失修改
2.二级封锁协议:解决读“脏”数据
3.三级封锁协议:解决不可重复读
11.4活锁和死锁
1.避免活锁:先来先服务。P315
2.避免死锁:一次封锁法,顺序封锁法。P316
3.死锁的诊断:超时法,等待图法。P316
11.5并行调度的可串行性
1.可串行化调度:P317
2.冲突可串行化:P317
3.冲突操作:不同事务对同一数据的读写和读读操作。P318
4.冲突可串行化一定满足可串行化调度。P318
11.6两段锁协议
本章重点题型:P326第9和10题
作者寄语
背背前面的再思考以下的说不定考试会考?
1.假设我对表的属性的名字我怎么维护程序的逻辑独立性?前面有提及哦!
2.如何判断关系的冗余?插入异常?删除异常?删除异常?怎么判断几NF?怎么修改关系模型达到更高的NF?
3.如何创建表?建立约束?插入数据?删除数据?查询指定的数据?查询**全部选修的课程?查询至少**选修的全部课程?
4.怎么画ER图?概念模型到逻辑结构的转换?
5.事务?锁?串行化调度?怎么画串行化的图?
等等…自己慢慢的幻想吧!
记得👍收藏!