数据库原理(1)
第一章 概论
一、基本概念
数据(Data)是数据库中存储的基本对象,描述事物的符号记录。例如学生的学号、姓名等信息都是数据。
数据库(Database,DB)长期存储在计算机内、有组织的、可共享的大量数据的集合。像学校的教务管理系统中的学生信息库。
数据库管理系统(Database Management System,DBMS)位于用户与操作系统之间的一层数据管理软件。它的主要功能包括数据定义、数据操纵、数据库的运行管理、数据库的建立和维护等。例如 MySQL、Oracle 等都是 DBMS。
数据库系统(Database System,DBS)由数据库、数据库管理系统(及其应用开发工具)、数据库管理员(DBA)和用户构成。
二、数据模型分类及三要素
1.数据模型分类
概念模型:按用户的观点对数据和信息建模,主要用于数据库设计。例如 E - R 模型(实体 - 关系模型)。
逻辑模型:按计算机系统的观点对数据建模,包括层次模型、网状模型、关系模型等。关系模型是目前最常用的逻辑模型,如在 MySQL 中使用关系模型来组织数据。
物理模型:描述数据在存储介质上的组织结构,与具体的 DBMS 和硬件有关。
2.数据三大模型
层次模型:像一棵树一样,有根节点、父节点和子节点,节点之间是一对多的联系。例如一个公司的部门组织架构可以用层次模型表示,公司总部是根节点,下设各个部门是子节点。树状结构
网状模型:节点之间可以是多对多的联系,其结构像网一样。例如交通网络中,各个城市(节点)之间有多条道路(联系)相连。网状结构
关系模型:以二维表的形式来组织数据,表中的一行称为一个元组,一列称为一个属性。例如学生表(学号,姓名,年龄,专业)就是一个关系模型。二维表
3.数据模型的三要素
数据结构:描述数据库的组成对象以及对象之间的联系。例如关系模型中的关系(二维表)结构。
数据操作:对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括查询和更新(插入、删除、修改)等操作。
数据的完整性约束条件:一组完整性规则的集合。例如在关系模型中,实体完整性要求关系的主键不能为空值。
三、三级模式与二级映像
三级模式
外模式(External Schema):是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。是用户与数据库系统的接口,是用户用到的那部分数据的描述。例如,在学校的教务管理系统中,教师查询学生成绩的界面所涉及的数据结构就是一种外模式。局部逻辑
模式(Schema):也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。它是数据库系统模式结构的中间层,既不涉及数据的物理存储细节和硬件环境,也与具体的应用程序、开发工具及高级程序设计语言无关。全局逻辑
内模式(Internal Schema):也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。例如数据在磁盘上的存储方式,如顺序存储、hash法,是否加密和压缩等。物理结构
二级映像
外模式 / 模式映像:定义了外模式与模式之间的对应关系。当模式改变时(例如增加新的关系、改变关系的属性等),由数据库管理员对各个外模式 / 模式的映像做相应改变,可以使外模式保持不变。应用程序是依据外模式编写的,从而应用程序不必修改,保证了数据的逻辑独立性。
模式 / 内模式映像:定义了模式与内模式之间的对应关系。当数据库的内模式(例如存储结构、存储方式等)发生改变时,由数据库管理员对模式 / 内模式映像做相应改变,可以使模式保持不变,从而应用程序也不必改变,保证了数据的物理独立性。
第二章 关系数据库
一、关系代数计算
选择(σ)从关系中选择满足给定条件的元组。例如,有学生关系表 Student(学号,姓名,年龄,性别),要选择年龄大于 20 岁的学生,关系代数表达式为:σ 年龄 > 20 (Student)。
投影(π)从关系中选择若干属性列组成新的关系。例如,从学生关系表 Student 中只选择学号和姓名这两个属性,关系代数表达式为:π 学号,姓名 (Student)。
自然连接(⨝)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。例如有学生关系表 Student(学号,姓名,专业)和选课关系表 CourseSelection(学号,课程号,成绩),要得到学生的学号、姓名、课程号和成绩的关系,关系代数表达式为:Student ⨝ CourseSelection。
除(÷)设关系 R (X,Y) 和 S (Y),其中 X、Y 可以是单个属性或属性集。R÷S 的结果是一个关系,其属性为 X,元组是满足以下条件的 X 值:在 R 中与该 X 值对应的 Y 值的集合包含 S 中的所有 Y 值。例如,有供应商关系表 Supplier(供应商编号,供应零件编号)和零件关系表 Part(零件编号),要找出能供应所有零件的供应商编号,就可能用到除运算。
并(∪)、交(∩)、差( - )、笛卡尔积(×)
并:设关系 R 和 S 具有相同的关系模式,R∪S 是由属于 R 或属于 S 的元组组成的集合。例如有两个关系 R(1,2)和 S(2,3),R∪S ={(1,2),(2,3)}。
交:设关系 R 和 S 具有相同的关系模式,R∩S 是由既属于 R 又属于 S 的元组组成的集合。例如 R(1,2)和 S(2,3),R∩S ={(2,3)}。
差:设关系 R 和 S 具有相同的关系模式,R - S 是由属于 R 但不属于 S 的元组组成的集合。例如 R(1,2)和 S(2,3),R - S ={(1,2)}。
笛卡尔积:设关系 R 为 m 元关系,有 k1 个元组;关系 S 为 n 元关系,有 k2 个元组。则 R×S 是一个 m + n 元关系,有 k1×k2 个元组。例如 R(a,b),S(c,d),R×S=(a,b,c,d)。
比较运算符:如大于(>)、小于(<)、等于(=)等,用于条件判断。
逻辑运算符:与(∧)、或(∨)、非(¬),用于组合多个条件。
二、根据查询要求写出关系代数表达式
仔细分析查询需求,确定需要使用的关系代数运算。
按照运算顺序准确写出表达式。例如,要查询选修了课程号为 'C1' 且成绩大于 80 分的学生的学号和姓名,假设学生关系为 Student(学号,姓名),选课关系为 CourseSelection(学号,课程号,成绩),关系代数表达式为:π 学号,姓名 (σ 课程号 = 'C1'∧成绩> 80 (Student ⨝ CourseSelection))。
第三章 SQL 语言
一、SQL 语言的基本功能
数据定义(DDL)用于定义数据库、表、视图、索引等数据库对象。
CREATE:用于创建数据库、表、索引等数据库对象。例如创建一个学生表:CREATE TABLE student (student_id INT PRIMARY KEY, name VARCHAR(50), age INT);
ALTER:修改数据库对象的结构。如给学生表增加一个性别列:ALTER TABLE student ADD COLUMN gender VARCHAR(10);
DROP:删除数据库对象。如删除一个表:DROP TABLE student;
数据操纵(DML)包括对数据库中数据的插入(INSERT)、更新(UPDATE)、删除(DELETE)操作
INSERT:向表中插入数据。例如向学生表插入一条记录:INSERT INTO student (student_id, name, age) VALUES (1, 'John', 20);
UPDATE:更新表中的数据。如将学号为1的学生年龄改为21:UPDATE student SET age = 21 WHERE student_id = 1;
DELETE:从表中删除数据。如删除学号为1的学生记录:DELETE FROM student WHERE student_id = 1;
数据查询(DQL)是 SQL 语言的核心功能,用于从数据库中查询数据。
SELECT:是SQL中最常用的语句,用于从一个或多个表中查询数据。例如查询所有学生的姓名和年龄:SELECT name, age FROM student;
数据控制(DCL)用于控制用户对数据库的访问权限,包括授权(GRANT)和收回权限(REVOKE)等操作。
GRANT:授予用户权限。如授予用户user1对学生表的查询权限:GRANT SELECT ON student TO user1;
REVOKE:收回用户权限。如收回用户user1对学生表的查询权限:REVOKE SELECT ON student FROM user1;
二、定义数据库、定义表的 SQL 命令
定义数据库 基本语法:CREATE DATABASE database_name; 其中 database_name 是要创建的数据库名称。例如 CREATE DATABASE school;
定义表基本语法:CREATE TABLE table_name (column1 datatype [constraint],column2 datatype [constraint],...); 例如 CREATE TABLE course (课程号 VARCHAR (10) PRIMARY KEY, 课程名 VARCHAR (50), 学分 INT); 这里的 PRIMARY KEY 是约束条件,表示课程号是主键。还可以定义外键约束,如 CREATE TABLE CourseSelection (学号 VARCHAR (10), 课程号 VARCHAR (10), 成绩 INT,FOREIGN KEY (学号) REFERENCES student (学号),FOREIGN KEY (课程号) REFERENCES course (课程号));
三、基本查询、条件查询、分组、排序、聚集函数、top 子句
基本查询:使用 SELECT 语句查询表中的所有数据,如 SELECT * FROM table_name。
条件查询:在 SELECT 语句中使用 WHERE 子句来指定查询条件。例如,查询年龄大于 20 岁的学生:SELECT * FROM student WHERE 年龄 > 20。对于空值的判断,可以使用 IS NULL 或 IS NOT NULL。例如,查询没有成绩的选课记录:SELECT * FROM CourseSelection WHERE 成绩 IS NULL。
分组(GROUP BY):按照指定的列对查询结果进行分组。例如,查询每个专业的学生人数:SELECT COUNT (*), 专业 FROM student GROUP BY 专业。
排序(ORDER BY):使用 ORDER BY 子句对查询结果进行升序(ASC,默认)或降序(DESC)排序。例如,查询学生信息并按照年龄从小到大排序:SELECT * FROM student ORDER BY 年龄 ASC。
聚集函数:如 COUNT 计算行数、SUM 计算总和、AVG 计算平均值、MAX 计算最大值、MIN 计算最小值等。例如,计算学生的平均年龄:SELECT AVG (年龄) FROM student。
top 子句:在不同的 DBMS 中有不同的实现方式,用于限制查询结果的行数。例如在 SQL Server 中:SELECT TOP 10 * FROM student; 在 MySQL 中:SELECT * FROM student LIMIT 10。
四、嵌套查询、连接查询
嵌套查询是指将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 子句中的查询。例如,查询选修了课程名为 ' 数学 ' 的学生学号,假设课程表为 course(课程号,课程名),选课表为 CourseSelection(学号,课程号),可以先查询出 ' 数学 ' 课程的课程号,再查询选修该课程号的学生学号。内层查询:SELECT 课程号 FROM course WHERE 课程名 = ' 数学 '; 外层查询:SELECT 学号 FROM CourseSelection WHERE 课程号 =(SELECT 课程号 FROM course WHERE 课程名 = ' 数学 ');
连接查询用于将多个表中的数据按照一定的条件组合在一起。例如内连接(INNER JOIN):SELECT student. 学号,student. 姓名,course. 课程名,CourseSelection. 成绩 FROM student INNER JOIN CourseSelection ON student. 学号 = CourseSelection. 学号 INNER JOIN course ON CourseSelection. 课程号 = course. 课程号;还可以有左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全连接(FULL JOIN)等不同类型的连接查询。
五、插入新记录、更新数据、删除数据
插入新记录使用 INSERT INTO 语句。例如,INSERT INTO student (学号,姓名,年龄) VALUES ('001',' 张三 ',20); 如果要插入所有列的值,可以省略列名,如 INSERT INTO student VALUES ('001',' 张三 ',20);
更新数据使用 UPDATE 语句。例如,UPDATE student SET 年龄 = 21 WHERE 学号 ='001';
删除数据使用 DELETE FROM 语句。例如,DELETE FROM student WHERE 学号 ='001';
六、索引的建立语句、分类、作用
建立语句基本语法:CREATE [UNIQUE] INDEX index_name ON table_name (column1 [ASC|DESC],column2 [ASC|DESC],...); 其中 UNIQUE 表示创建唯一索引,index_name 是索引名称,table_name 是要创建索引的表名,column1、column2 等是要创建索引的列名,可以指定升序(ASC)或降序(DESC)排列。例如,CREATE INDEX idx_name ON student (姓名);
分类
聚集索引(clustered):该索引中键值的逻辑顺序决定了表中相应行的物理顺序。一个表只能有一个聚集索引。
非聚集索引(non - clustered):索引的逻辑顺序与表中行的物理顺序不同。一个表可以有多个非聚集索引。
作用提高查询速度,通过快速定位数据的物理位置或逻辑位置,减少查询时的磁盘 I/O 操作。
七、视图的建立 SQL 命令
基本语法:CREATE VIEW view_name AS SELECT column1,column2,... FROM table_name WHERE condition; 例如,CREATE VIEW young_student AS SELECT * FROM student WHERE 年龄 < 20; 视图是一个虚拟表,它是从一个或多个基本表(或视图)导出的表,视图本身不存储数据,数据仍然存储在基本表中。
第四章 数据库安全性
一、安全性基本定义
数据库安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。例如,防止非法用户登录数据库系统查看或修改敏感数据,如学生的成绩信息、用户的银行账户信息等。
二、自主存取控制
授权(GRANT)用于将对数据库对象(如表、视图等)的操作权限授予用户或角色。例如,授予用户 user1 对学生表 student 的查询权限:GRANT SELECT ON student TO user1; 还可以授予多个权限,如 GRANT SELECT,INSERT ON student TO user1;
收回权限(REVOKE)与授权操作相反,用于收回用户或角色对数据库对象的操作权限。例如,收回用户 user1 对学生表 student 的查询权限:REVOKE SELECT ON student FROM user1; 在授权和收回权限的语句中,直接在 ON 后面跟表名或视图名,不需要写 table 或者 view 字样。