1.绪论
- 数据:描述事物的符号记录
- 数据库数据特点:永久存储,有组织,可共享
- 数据库的事务管理:保证事务的正确运行,保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复
- 数据库系统:数据库+数据库管理工具+数据库管理员
- 文件系统与数据库系统的本质区别:数据库系统实现了整体数据的结构化,即文件系统仅仅只是记录内部具有结构,而记录与记录间没有结构和联系
- 数据共享:减少数据冗余,避免数据间的不相容性与不一致性
- 数据独立性:包括物理独立性和逻辑独立性,能够保证数据的物理存储和逻辑结构改变时,应用程序不需要改变。数据的定义和操作从应用程序中分离,方便程序维护和修改
- 物理独立性:数据库中数据的物理存储改变时,应用程序不需要改变
- 逻辑独立性:数据库中数据的逻辑结构改变时,应用程序不需要改变
- 认识抽象->概念模型->数据模型
- 概念模型中的基本概念:实体,属性,码,实体型,实体集,联系
- E-R模型:描述现实世界的概念模型
- 数据模型=数据结构+数据操作+数据的完整性约束条件
- 数据结构是所描述的对象类型的集合,是对系统静态特性的描述
- 数据操作是指对各种对象型的值允许执行的操作的集合
- 数据的完整性约束条件是一组完整性规则
- 关系模型:由一组关系组成,每个关系的数据结构是一张规范化的二维表
- 关系:一个关系对应一张表
- 元组:表中的一行即为一个元组
- 属性:表中的一列即为一个属性
- 码:表中的一个或多个属性,它可以唯一确定一个元组,即为本关系的码
- 域:属性的取值范围来自某个域,类似于一个数组
- 分量:元组中的一个属性值
- 关系的规范化:每个分量必须是一个不可分的数据项,即不允许表中有表
- 关系模型的完整性约束:实体完整性,参照完整性,用户自定义完整性
2.关系数据库
- 笛卡尔积:域1X域2,将两个域的分量任意组合形成元组,多个元组构成一个关系
- 关系:多个域的笛卡尔积的子集叫做该域的关系
- 候选码:是一组能够唯一标识一个元组的属性,而其子集不能唯一标识
- 主码:从多个候选码中选择一个作为主码,本质还是候选码
- 外码:一个关系的非主码属性在其他关系中是主码,称该码为该关系的外码
- 主属性:候选码中的属性
- 全码:关系中所有属性都是这个关系的候选码
- 关系的三种类型:基本表,查询表,视图表
- 关系操作:包括增删查改,特点是操作对象和结果都是集合
- 5种基本的查询操作:选择,投影,并,差,笛卡尔积
- 实体完整性规则:主码中的属性不能取空值
- 参照完整性规则:外码中属性取空值或者取其引用值
- 自定义完整性规则:非空,唯一,取值范围,自增
- 关系代数
- 象集与除法
3.数据库语言SQL
- 外模式(视图)-模式(基本表)-内模式(存储文件)
- SQL基础
- SQL查询
- 聚合和排序
- 数据更新
4.关系数据理论
- 简化的关系模式R<U,F>=关系名R+属性U+数据依赖F
- 第一范式(1NF):每个分量必须是不可分的数据项(不能表中有表)
- 数据依赖:属性间的约束关系,通过属性值是否相等来体现,是数据语义的体现,有函数依赖和多值依赖两种
- 函数依赖:根据数据语义分析,属性A的值确定后,属性B的值也唯一确定,称A->B,A决定B,A为B的决定因素,A与B一一对应
- 完全函数依赖:要求决定因素的真子集不能是决定因素
- 第二范式(2NF):每一个非主属性完全函数依赖于任何一个候选码
- 第三范式(3NF):每一个非主属性既不传递依赖于码,也不部分依赖于码
- 扩充的第三范式(BCNF):每一个决定因素都包含码,全码必为BCNF
- 多值依赖:(a,b)->c,a与c为一对多的关系,而b与c没有关系,即b为冗余,函数依赖是多值依赖的特殊情况
- 第四范式(4NF):消除表中的属性的多对多关系
5.数据库恢复技术
- 事务的ACID特性:原子性,一致性,隔离性,持续性
- 事务是恢复和并发控制的基本单位
- ACID特性可能遭到破坏的原因:多个事务并行运行时,不同事务的操作交叉执行;事务在运行过程中被强行停止
6.并发控制
- 保证事务的隔离性和一致性
- 并发操作带来的数据不一致性:丢失修改,不可重复读和读脏数据
CREATE TABLE SC
(
Sno VARCHAR(9),
Cno VARCHAR(4),
PRIMARY KEY(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
ALTER TABLE SC ADD S_entrance DATA;
ALTER TABLE SC ALTER COLUMN Sage INT;
ALTER TABLE SC ADD UNIQUE(Cname);
DROP TABLE SC CASCADE;
SELECT Sname,Sno,Sdept FROM Student;
SELECT * FROM Student;
SELECT DISTINCT Sno FROM Student;
SELECT Sage,Sname FROM Student WHERE Sage>=22;
SELECT Sage,Sname FROM Student WHERE Sage BETWEEN 20 AND 25;
SELECT Sage,Sname FROM Student WHERE Sage IN (21,22,23);
SELECT Sage,Sname FROM Student WHERE Sname LIKE '谢%';
SELECT Sage,Sname FROM Student WHERE Sname LIKE '谢_';
SELECT * FROM Student ORDER BY Grade DESC;
SELECT * FROM Student ORDER BY Grade ASC;
SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;
SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)>3;
SELECT Sno,Sname,Sage,Grade FROM Student,SC WHERE Student.Sno=SC.Sno;
INSERT INTO SC (Sno,Cno) VALUES(12,3);
UPDATE SC SET Sno=13 WHERE Cno=3;
DELETE FROM SC WHERE Sno=13;