视图是从一个或几个基本表(或视图)导出的虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
聚簇索引也叫簇类索引,是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序,它改变的是数据库的内模式。
概念 | 解释 |
---|---|
关系 | 可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名。 |
元组 | 可以理解为二维表中的一行,在数据库中经常被称为记录。 |
属性 | 可以理解为二维表中的一列,在数据库中经常被称为字段。 |
域 | 属性的取值范围,也就是数据库中某一列的取值限制。 |
关键字 | 组可以唯一标识元组的属性,数据库中常称为主键由一个或多个列组成。 |
关系模式 | 指对关系的描述。其格式为:关系名(属性1,属性2···属性N),在数据库中成为表结构。 |
三级模式构成了数据库系统的总体设计和架构,概念模式描述了数据库的整体结构和关系,外模式描述了特定用户或应用程序的需求和视图,而内模式描述了数据在物理存储介质上的组织和表示方式。
模式/内模式映像:存在于概念级和内部级之间,实现了概念模式和内模式之间的相互转换。
外模式/模式映像:存在于外部级和概念级之间,实现了外模式概和概念模式之间的相互转换。
逻辑独立性:当模式改变时(例如增加新的关系,新的属性,改变属性的数据类型等),由数据库管理员对各个外模式/模式的映像做相应的改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
物理独立性:当数据库的存储结构改变,由数据库管理员对模式/内模式映像做响应的改变,可以使模式保特不变,从而应用程序也不必改变,保证了数据与程序的物理独立性,简称数据的物理独立性。
数据模型三要素:
数据结构、数据操作、数据的约束条件。
E-R 图中的主要构件:
实体:用矩形表示,每个实体由一组属性表示,包括主键、候选键、外键。
联系:用菱形表示,分为一对一(1:1)、一对多(1:n)、多对多(m:n)。
属性:用椭圆表示,是实体某方面的特性。
E-R 模型中的属性分为:简单和复合属性;单值和多值属性;null 属性;派生属性。
集合运算符 | 含义 | 描述 |
---|---|---|
∪ \cup ∪ | 并 | 关系 R 与 S 的并是由属于 R 或属于 S 的元组构成的集合 |
− - − | 差 | 关系 R 与 S 的差是由属于 R 但不属于 S 的元组构成的集合 |
∩ \cap ∩ | 交 | 关系 R 与 S 的交是由属于 R 同时又属于 S 的元组构成的集合 |
× \times × | 笛卡尔积 | 两个元组分别为 n 目和 m 目的关系 R 和 S 的笛卡尔积是一个(n+m)列的元组的集合。元组的前 n 列是关系 R 的一个元组,后 m 列是关系 S 的一个元组。 |
关系运算符 | 含义 | 描述 |
---|---|---|
σ \sigma σ | 选择(选行) | 取得关系 R 中符合条件的行 |
π \pi π | 投影(选列) | 取得关系 R 中符合条件的列 |
R . B = S . B R.B=S.B R.B=S.B | 等值连接 | 关系 R、S,取两者笛卡尔积中属性值相等的元组 |
⋈ \Join ⋈ | 自然连接 | 一种特殊的等值连接,它要求比较的属性列必须是相同的属性组,并且把结果中重复属性(列)去掉 |
左外连接 | R 和 S 进行自然连接时,只把 R 中舍弃的元组放到新关系中 | |
右外连接 | R 和 S 进行自然连接时,只把 S 中舍弃的元组放到新关系中 | |
完全外连接 | R 和 S 进行自然连接时,把 R 和 S 中舍弃的元组都放到新关系中 |
你提到的这些 SQL 命令分别属于 SQL 的两个主要类别:数据定义语言(DDL)和数据操纵语言(DML)。
DDL 用于定义数据库结构,包括表、列、索引等的创建、删除和修改。
CREATE:用于创建数据库对象,如表、视图、索引等。
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(50),
Age INT,
GPA FLOAT
);
DROP:用于删除数据库对象,如表、视图、索引等。
DROP TABLE Students;
ALTER:用于修改数据库对象的结构,如添加列、修改列、删除列等。
ALTER TABLE Students ADD COLUMN Major VARCHAR(50);
DML 用于处理数据库中的数据,包括插入、更新、删除和查询数据。
INSERT:用于向表中插入新记录。
INSERT INTO Students (StudentID, Name, Age, GPA) VALUES (1, 'Alice', 20, 3.5);
UPDATE:用于更新表中的现有记录。
UPDATE Students SET GPA = 3.7 WHERE Name = 'Alice';
DELETE:用于从表中删除记录。
DELETE FROM Students WHERE StudentID = 1;
查询是使用 SQL 语言从数据库中检索所需数据的过程。SQL 查询语句通常使用 SELECT 语句来实现。以下是一些常见的查询示例:
简单查询:选择表中的所有列和所有行。
SELECT * FROM Students;
条件查询:根据特定条件过滤检索的数据。
SELECT * FROM Students WHERE Age > 18;
投影查询:只选择表中的特定列。
SELECT Name, GPA FROM Students;
排序查询:按特定列对检索的数据进行排序。
SELECT * FROM Students ORDER BY GPA DESC;
聚合查询:对数据进行统计分析。
SELECT COUNT(*) AS TotalStudents FROM Students;
联合查询:将两个或多个查询的结果合并起来。
SELECT * FROM Students WHERE Age > 18
UNION
SELECT * FROM Students WHERE GPA > 3.5;
连接查询:使用 JOIN 操作符将多个表连接起来,并根据相关列的值关联它们。
SELECT Students.Name, Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentID = Departments.DepartmentID;
子查询:在查询内部嵌套另一个查询。
SELECT Name
FROM Students
WHERE GPA > (SELECT AVG(GPA) FROM Students);
DCL 用于管理数据库对象的访问权限。
GRANT:授予用户对数据库对象(如表、视图)的特定权限。
GRANT SELECT, INSERT ON Students TO user1;
将 SELECT 和 INSERT 权限授予给名为 user1 的用户,使其可以查询和插入 Students 表中的数据。
REVOKE:撤销用户对数据库对象的权限。
REVOKE INSERT ON Students FROM user1;
撤销名为 user1 的用户对于 Students 表的 INSERT 权限。
函数依赖:在关系模式 R ( U ) R(U) R(U) 中,如果对于 U U U 的子集 X X X 和 Y Y Y,当 X X X 中的属性值确定时, Y Y Y 中的属性值也随之唯一确定,那么我们称 X X X 函数确定 Y Y Y 或 Y Y Y 函数依赖于 X X X,记作 X → Y X \rightarrow Y X→Y。 X X X 被称为决定属性,也称为决定因素。
平凡依赖:在关系模式 R ( U ) R(U) R(U) 中,存在函数依赖 X → Y X \rightarrow Y X→Y,但是 Y Y Y 是 X X X 的子集,即 Y ⊆ X Y \subseteq X Y⊆X,则称 X → Y X \rightarrow Y X→Y 为平凡的函数依赖。
非平凡依赖:在关系模式 R ( U ) R(U) R(U) 中,存在函数依赖 X → Y X \rightarrow Y X→Y,并且 Y Y Y 不是 X X X 的子集,则称 X → Y X \rightarrow Y X→Y 为非平凡的函数依赖。
完全依赖:在关系模式 R ( U ) R(U) R(U) 中,存在函数依赖 X → Y X \rightarrow Y X→Y,而不存在 X X X 的真子集 X ′ X' X′ 能够决定 Y Y Y,那么就称 Y Y Y 完全函数依赖于 X X X。
部分依赖:在关系模式 R ( U ) R(U) R(U) 中,存在函数依赖 X → Y X \rightarrow Y X→Y,并且存在 X X X 的真子集 X ′ X' X′,使得 X ′ X' X′ 也能唯一决定 Y Y Y,那么就称 Y Y Y 部分函数依赖于 X X X。
传递依赖:在关系模式 R ( U ) R(U) R(U) 中,如果存在函数依赖 X → Y X \rightarrow Y X→Y 和 Y → Z Y \rightarrow Z Y→Z,则 Z Z Z 传递依赖于 X X X ,即存在 X → Z X \rightarrow Z X→Z。
Armstrong 公理系统:一组公理,用于推导关系数据库模式中的函数依赖。
第一范式(1NF):数据库中的每个属性都应该是原子性的,不可再分。
第二范式(2NF):数据库表必须符合第一范式。消除部分依赖,所有非主属性都必须完全依赖于主键,而不能只依赖于主键的部分属性。
第三范式(3NF):数据库表必须符合第二范式。消除传递依赖,即任何非主属性都不能依赖于其他非主属性。
分解:将一个关系模式(表)分解成多个较小的关系模式(表)的过程。
无损连接:指在关系模式分解后,通过连接操作可以完全恢复原始关系模式的能力。
保存函数依赖:在关系模式分解过程中,需要确保分解后的子模式能够保留原始关系模式中的函数依赖。
事务是指作为单个逻辑工作单元执行的一系列操作,要么完全执行,要么完全不执行。
数据库事务隔离级别是指多个并发事务之间的隔离程度,用于控制事务之间的相互影响。
隔离级别 | 描述 | 可能出现的问题 |
---|---|---|
读未提交 | 事务可以读取其他未提交事务的数据 | 脏读、不可重复读、幻读 |
读提交 | 事务只能读取已提交的其他事务的数据 | 不可重复读、幻读 |
可重复读 | 事务在执行期间多次读取相同的数据时保持一致性 | 幻读 |
序列化 | 事务之间完全隔离,按顺序执行,避免了其他问题 | - |
多个并发事务执行时可能发生的不一致性问题:
脏读:指一个事务读取了另一个事务未提交的数据。即事务 A 读取了事务 B 修改但尚未提交的数据,如果事务 B 之后回滚了,那么事务 A 读取的数据就是脏数据。
不可重复读:指同一个事务的两次读取过程中,由于其他事务的修改,导致两次读取的结果不一致。即一个事务在读取某个数据后,另一个事务修改了该数据并提交,然后第一个事务再次读取该数据时,发现数据值与之前读取的值不一致。
幻读:指在同一个事务的两次查询中,由于其他事务的插入或删除操作,导致两次查询的结果集不一致。即一个事务在执行一次查询后,另一个事务插入了新的数据,然后第一个事务再次执行相同的查询时,发现结果集中出现了新增或删除的数据。
共享锁(读锁)和排他锁(写锁)是数据库中常用的两种锁定机制,用于控制并发访问。
共享锁(S 锁,读锁): 当一个事务对数据对象加上共享锁时,其他事务也可以对同一数据对象加上共享锁,以实现并发读取操作。共享锁允许多个事务同时读取数据,但不允许任何事务对数据进行修改。只有在所有持有共享锁的事务都释放了锁之后,其他事务才能对该数据对象进行修改。
排他锁(X 锁,写锁): 当一个事务对数据对象加上排他锁时,其他事务不能对该数据对象加任何类型的锁,包括共享锁和排他锁。排他锁用于确保事务对数据对象的独占访问权,防止其他事务对数据对象进行读取或修改。只有在持有排他锁的事务释放了锁之后,其他事务才能对该数据对象进行任何操作。
数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。
ETL 是数据仓库中常见的数据处理过程的缩写,它代表了三个关键步骤:
提取: 从一个或多个源系统中提取数据。
转换: 将提取的数据转换成可用于分析和业务决策的高质量数据。转换的过程可能包括数据清洗、数据整合、数据规范化、数据去重、数据计算等操作。
加载: 将经过转换处理后的数据加载到目标系统中。
分布式数据库是将数据存储和处理分散在多个物理或逻辑节点上的数据库系统。
分布式数据库的特点:高可扩展性、高并发性、高可用性。