第 1 章
- 数据管理的发展阶段
- 人工
- 文件系统
- 数据库系统
- NoSQL 非结构化数据库
- 四大分类
- 常见的 NoSQL 数据库
- 数据库相关概念
- 数据库
- 数据库系统
- 数据库管理系统 数据定义语言(DDL)定义数据库中的数据对象 数据查询语言 (DQL) 数据操纵语言(DML)实现对数据库的基本操作 (查询、插入、删除和修改) 数据库控制语言(DCL)
第 2 章
- 数据模型(数据模型通常由数据结构、数据操作和
完整性约束三个部分组成)
- 概念模型
- 逻辑模型
- 物理模型
- ==概念模型——ER 图==
- 逻辑模型——关系模型
- ==三层模式体系结构和数据独立性== 三级模式:(逻辑)模式,外模式,内模式。 数据独立性
- 数据与程序间的互不依赖性, 即数据库中数据独立于应用程序而不依赖于应用程序。也就是说, 数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序
两级映像: 1. 外模式/概念模式映象(保证数据的逻辑独立性) - 模式:描述的是数据的全局逻辑结构 - 外模式:描述的是数据的局部逻辑结构 - 每一个外模式,数据库系统都有一个外模式/模式映象 - 外模式/模式映象定义了该外模式与概念模式之间的对应关系。 - 映象定义通常包含在各自外模式的描述中
- 概念模式/内模式映象(保证数据的物理独立性)
- 定义了数据全局逻辑结构与存储结构之间的对应关系。如,说明逻辑记录和字段在内部是如何表示的
- 数据库中模式/内模式映象是唯一的
- 该映象定义通常包含在模式描述中 # 第 3 章
- 关系模型概念
- 域、属性、元组和关系
- 主码(主关键字)
- 外码(外关键字)
- 关系的完整性约束
- 实体完整性:关系模型以主码作为唯一性标识,主码中的属性即主属性不能取空值
- 参照完整性:外码
- 用户定义完整性:反映某一具体应用所涉及的数据必须满足的语义要求
- 域完整性
- 关系代数
- 并交差( \(R∪S\) 、 \(R∩S\) 、 \(R-S\) )
- 笛卡尔积、自然连接( \(R×S\) 、 \(R*S\) )
- 选择、投影( \(\sigma(R)\) 、 \(πA(R)\) )
- 除 \((R÷S)\)
第 4 章
- ==SQL 语言的功能组成==: 数据定义(DDL)、数据查询(DQL)、数据操纵(DML)、数据控制 (DCL)
- ==SQL 语言的特点==:
- 一体化
- 高度非过程化
- 面向集合的操作方式
- 提供多种方式使用
- 语言简洁
- SQL 中的表和关系模型中关系的区别:==表是关系模型中关系的具体实现==,在 SQL 中,一个表可以对应一个实体,多个表之间的关联关系可以用 SQL 语句和外键来描述。
- 单表查询
- 不带元组筛选条件的单表查询
- 重命名查询结果关系列名
- 筛选元组
- 三值逻辑与空值检查
- 查询结果排序
- 返回“计算列”
- IN、BETWEEN、DISTINCT、LIKE 的用法
- 五个汇总函数的用法
- COUNT ( )
- SUM ( )
- MAX ( )
- MIN ( )
- AVG ( )
- 分组及对分组的筛选
- 多表连接查询
- 内联接:
table1 [inner] join table2 on 条件 - 外联接 :
table1 left [outer] join table2 on 条件 - 自联接
- 内联接:
- 子查询
- 带有 IN 谓词的子查询
- 带有比较运算符的子查询
- 带有 ANY 或 ALL 谓词的子查询
- 带有 EXISTS 谓词的子查询
- 不相关子查询与相关子查询的区别
- 数据的增、删、改
- DDL 数据定义语言
- 创建数据库 (简易版):重命名数据库:
sp_renamedb 'old_name', 'new_name'和ALTER DATABASE mydb RENAME TO newdb; - 删除数据库:
DROP DATABASE database_name; - 创建数据库表:指定数据类型、是否允许为空、标识列
- 修改数据库表:增加列、修改列、删除列
- 删除数据库表
- 完整性约束条件
- 默认值约束:
DEFAULT(constant_expression | NULL) - 对数据格式的约束:
IN LIKE BETWEEN - 对取值范围或取值集合的约束:
check(约束) - 主键约束:
[constraint pk_name] primary keyORprimary key(c1,c2...) - 外键约束:
foreign key(c1) references table(c1)(级联删除——on delete cascade、级联更新——on update cascade) - 唯一约束:
unique且允许为空 - 删除约束 修改数据库表(ALTER TABLE)
1
2
3
4
5- ALTER TABLE name ADD email VARCHAR (100); --会在名为 `name` 的表中添加一个名为 `email` 的新列,其数据类型为 `VARCHAR (100)`。
- ALTER TABLE name ALTER COLUMN salary DECIMAL (12, 2); --这将修改 `name` 表中 `salary` 列的数据类型为 `DECIMAL (12, 2)`。
- ALTER TABLE name DROP COLUMN phone_number; --这会从 name 表中删除 phone_number 列。
- ALTER TABLE name ADD CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES customers (customer_id); --这会在 `name` 表中添加一个外键约束,确保 `customer_id` 列的值必须是 `customers` 表中的 `customer_id`。
- ALTER TABLE name DROP CONSTRAINT chk_salary; --这会从 `name` 表中删除名为 `chk_salary` 的检查约束。
- ... 具体在知识点总结里面有很多例子[[《数据库原理及应用》知识点整理 + 习题_数据库原理及应用重点总结 - CSDN 博客]]
- 视图的概念
- 视图的优点
- 视图的创建
- 视图的修改
- 删除视图
- 查询视图的步骤
- 视图的更新
- ==视图可更新性的基本判断原则==
1
2select top 5* from sc --前五条记录
select top 20 percent * from sc -- 前20%的记录
- 判断取值为空的语句格式为:列名
IS NULL 判断取值不为空的语句格式为:列名
IS NOT NULLorder by默认升序,desc降序 Example:查询全体学生的信息,查询结果按所在系的系名升序排列,同一系的学生按年龄降序排列SELECT * FROM Student ORDER BY Sdept, Sage DESC
对于 group by 后面的那个属性,前面必须有相应属性。使用
Group By 就必须使用集合函数 只有 count(*)
能计算上空值,其他函数忽略空值
例如 1. 查询年龄最大的学生姓名
错误写法:SELECT Sname FROM Student WHERE Sage = MAX (Sage)
╳ (where 后面不能加函数) 正确写法;
SELECT Sname FROM Student WHERE Sage = (SELECT MAX (SAGE) FROM STUDENT);
2. 查询选修了“数据库基础”课程的学生的学号、姓名 子查询:
|
第 5 章
- 函数依赖
- 部分依赖
- 完全依赖
- 传递依赖
- 范式
- 第一范式: 所有属性都是不可分的数据项
- 第二范式: 如果 \(R (U, F)∈1 NF\),并且 \(R\) 中的每个非主属性都完全函数依赖于主码,则 \(R (U, F)∈2 NF\)
- 确定候选键:找出能够唯一标识每条记录的属性集合。在实际情况中可能需要参考业务规则及数据语义。
- 检查部分依赖:对每个非主属性,检查它是否完全依赖于候选键。也就是说,一个候选键的一部分能否独立决定某个非主属性的值,如果可以,说明存在部分依赖,那么它就不符合第二范式。
- 第三范式:如果 \(R (U, F )∈2 NF\),并且所有非主属性都不传递依赖于主码,则 \(R (U, F )∈3 NF\)
- BC 范式:如果关系模式满足第三范式,并且不存在主属性对非所在码(不包含本主属性的码)的传递依赖和部分依赖,则称其满足BC 范式 “好”的模式
- 不会发生插入异常、删除异常、更新异常
- 数据冗余应尽可能少。
第 6 章
- 数据库设计的基本过程及每阶段的主要任务
- ==E-R 建模和绘制 E-R 图的方法==
- “数据库逻辑结构设计阶段”的任务
- 将 E-R 模型转换为关系模型的规则和方法 各局部 E-R 图之间的冲突
- 属性冲突
- 属性域冲突。即属性的类型、取值范围和取值集合不同
- 属性取值单位冲突
- 命名冲突
- 同名异义
- 异名同义
- 结构冲突
- 同一对象在不同应用中具有不同的抽象
- 同一实体在不同的 E-R 模型中,其属性的个数和排列次序不完全相同
- 实体间联系在不同局部 E-R 图中类型不同 # 第 7 章
- 事务
- 定义:事务是用户定义的一个数据操作序列,这些操作要么全部执行、要么全部不执行,是一个不可分割的工作单元
- ACID 特性:原子性,一致性,隔离性,持久性。
- 并发控制
- ==并发调度的可串行性==:多个事务的并发执行是正确的,当且仅当其结果与按某一顺序的串行执行的结果相同,则我们称这种调度为可串行化的调度
- 并发操作引起的问题:丢失数据修改,读脏数据,不可重复读。
- 并发控制——锁
- 共享锁 (S 锁)
- 排他锁 (X 锁)
- ==封锁协议== (一,二,三级协议)
一级协议:对事务 T 要修改的数据加 X 锁,直到事务结束(包括正常结束和非正常结束)时才释放 - 不能保证可重复读 - 不能保证不读“脏数据 二级协议:一级封锁协议加上对事务 T 对要读取的数据加 S 锁,读完后即释放 S 锁 - 不能防止可重复读 三级协议:一级封锁协议加上事务 T 对要读取的数据加 S 锁,并直到事务结束才释放 - 无缺点 ==死锁==:两个事务相互等待对方先释放资源 多采用诊断并解除死锁的方法 两段锁协议: - 在对数据进行读、写操作前,首先获得对该数据的封锁。 - 在释放一个封锁之后,事务不再申请和获得其他任何封锁 ==所有遵守两段锁协议的事务,其并行执行的结果一定是正确的==
TODO: 7,10,11 chapter
复习完之后,再去看看期末模拟卷子,然后就复习计算机网络 # 第 10 章
1. SQL SERVER 的安全控制过程、安全控制模型 2. SQL SERVER 的身份验证模式
3. SQL SERVER 登录名的管理 4. SQL SERVER 数据库用户的管理 5. SQL SERVER
权限的管理 6. SQL SERVER 角色的管理 创建数据库 1
2
3
4
5
6
7
8
9
10
11CREATE DATABASE 数据库名
[ON
[ <文件格式> [ , … n ] ]
]
[ LOG ON { <文件格式> [ , … n ] } ]
<文件格式> ::=
( [ NAME = 逻辑文件名, ]
FILENAME = ‘操作系统下的物理路径和文件名’
[, SIZE = 文件初始大小 ]
[, MAXSIZE = 文件最大大小 | UNLIMITED ]
[, FILEGROWTH = 增量值 ] ) [ , … n]
1 | create login user1 with password='1234' |
权限问题: grant select on student to user1
REVOKE SELECT ON Student FROM user1
DENY UPDATE ON student TO user1
第 11 章
- 备份类型:完整备份,差异备份,事务日志备份。
- 备份策略:完整备份+差异备份+日志备份 恢复数据库的顺序: 1)恢复最近的完全数据库备份 2)恢复完全备份后的最近的差异数据库备份 3)按日志备份的先后顺序恢复自完全备份或差异备份之后的所有日志备份 # 第 12 章
- 变量
- 流程控制语句
- 存储过程
- 定义
- 优点
- 创建
- 执行
- 触发器
- 创建
常用的全局变量:
| 全局变量名 | 含义 |
|---|---|
| @@ERROR | 最后一个 T-SQL 错误的错误号误号 |
| @@IDENTITY | 最后一次插入的标记值 |
| @@LANGUAGE | 当前使用的语言的名称 |
| @@MAX_CONNECTIONS | 可以创建的同时连接的最大数目 |
| @@ROWCOUNT | 受上一个 SQL 语句影响的行数行数 |
| @@SERVERNAME | 本地服务器的名称 |
| @@TRANSCOUT | 当前连接打开的事务数 |
| @@VERSION | SQL Server 的版本信息本 |
例如判断张长弓是否是计算机学院的学生 1
2
3
4
5
6
7DECLARE @院系 CHAR (20)
SELECT @院系=Sdept FROM student
WHERE sname=‘张长弓'
IF @院系=‘计算机学院’
PRINT ‘张长弓是计算机学院的学生’
ELSE
PRINT ‘张长弓不是计算机学院的学生’
==创建存储过程== 1
2
3
4
5
6
7
8
9--创建
CREATE PROCEDURE porc_name
AS
BEGIN
statement_1
[statement_2...]
END
--执行
EXECUTE porc_name1
2
3
4
5
6
7
8
9
10Create Procedure prcAVG @课程名 char(30).
@平均成绩 FLOAT OUTPUT
As
BEGIN
Select @平均成绩 =AVG(Grade)From SC where Tno=
(Select Cno From Course where Cname= @课程名)
END
DECLARE @avgGrade float
EXECUTE prcAVG '数据库基础',@avgGrade OUTPUT
==触发器的创建== 1
2
3
4CREATE TRIGGER trigger_name ON { OBJECT NAME }
{ FOR | AFTER | INSTEAD OF } { event_type [,...n ] | DDL_DATABASE_LEVEL_EVENTS }
{ AS{ sql_statement [ ...n ] } }1
2
3
4
5
6
7
8create trigger trgTime on Course
after update
as
begin
update Course
set ModifiedDate=getdate() from inserted
where Course.cno=inserted.cno
end1
2
3
4
5
6ALTER TRIGGER trigger_name
{ FOR | AFTER} { event_type [ ,... n ]|
DDL_DATABASE_LEVEL_EVENTS}
{AS
{ sal statement [ ... n ] }
}DROP TRIGGER {trigger}
需要加强的方面的是: - 概念 - TSQL 语句 - 锁 - 函数依赖与范式 - 嵌套查询
TSQL 权限管理方面
数据库创建
CREATE DATABASE
语句用于创建新的数据库。它允许指定数据库的名称、文件位置、大小和增长设置。
示例
1 | CREATE DATABASE MyNewDatabase |
在这个例子中,我们创建了一个名为 MyNewDatabase
的数据库,主数据文件位于 C:\SQLData\,日志文件位于
C:\SQLLog\。
用户和角色管理
CREATE LOGIN用于创建新的登录账户。CREATE USER用于在数据库中创建用户。sp_addrolemember用于将用户添加到角色中。sp_droprolemember用于从角色中删除用户。
示例
1 | -- 创建登录账户 |
权限管理
GRANT用于授予权限。REVOKE用于收回权限。DENY用于拒绝权限。
示例
1 | -- 授予权限 |
在这个例子中,用户 user1 被赋予了对 MyTable
表的查询权限,然后这个权限被收回,最后用户被拒绝对 MyTable
表进行更新操作。
固定数据库角色
SQL Server 提供了一些预定义的数据库角色,这些角色有特定的权限。
示例
1 | -- 授予数据库角色权限 |
在这个例子中,用户 user1 被添加到 db_owner
角色中,然后从 db_owner 角色中删除。