数据库
第一章 绪论
数据
是数据库中存储的基本对象 || 描述事物的符号记录称为数据 || 数据的含义称为数据的语义,数据与语义是不可分的数据库
是长期存储在计算机内、有组织的、可共享的大量数据的集合 || 较小冗余度、较高的数据独立性、易扩展性、可为各种用户共享
三个基本特点永久存储、有组织、可共享
数据库管理系统
(DBMS)
是建立在【操作系统】之上的
科学组织和储存 ,是位于【用户】和【操作系统】之间的一层数据管理软件
简述数据库管理系统的功能:1.数据定义功能 2.数据组织、存储和管理 3.数据操纵功能 4.数据库的事务管理和运行管理 5.数据库的建立和维护功能 6.其它功能数据库系统
(DBS)
由【数据库】【数据库管理系统】【应用程序】【数据库管理员】组成的存储、管理、处理和维护数据的系统
×××
数据库管理系统是指在计算机系统中引入数据库后的系统,一般由DB、DBS、应用系统和DBA组成。- 数据管理三个阶段:【人工管理】【文件系统】【数据库系统】
在数据管理技术发展的过程中,有专门管理数据的软件的是【文件系统阶段和数据库系统阶段】 数据库系统
的特点:1、数据的结构化
,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别 2、数据的共享性高,冗余低且易扩充
3、数据独立性高
(物理独立性,逻辑独立性)4、数据由数据库管理系统统一管理和控制
(安全性保护、完整性检查 、并发控制、数据库恢复)数据模型
是对【现实世界】数据特征的抽象,是数据库系统的核心和基础
包括概念模型
和逻辑模型和物理模型
【概念模型】现实世界->信息世界
概念数据模型:实体-联系模型
(概念模型是现实世界到机器世界的一个中间层次。概念模型用于信息世界的建模,是数据库设计人员进行数据库设计的有力工具,也是数据库设计人员和用户之间进行交流的语言)
1、实体:客观存在并可相互区别的 事物
2、属性:实体所具有的某一特性
3、码:唯一标识实体的属性集
4、实体型:用实体名及其属性名【集合】来抽象和刻画同类实体,学号(学号,姓名,性别,出生年月)
5、实体集:同一类型实体的集合,全体学生
6、联系:实体之间的联系通常是指不同实体集之间的联系【一对一、一对多、多对多】
7、E-R模型
数据模型通常由数据结构、数据操作和完整性约束三部分组成
①数据结构
:描述数据库的组成对象和对象之间的联系,是对系统的静态特性的描述。 ②数据操作
:是指对数据库中各种对象(型)的实例(值)允许进行的操作的集合,包括操作及有关的操作规则,是对系统动态特性的描述。 ③数据的约束条件
:是完整性规则的集合,完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证 数据的正确、有效和相容。
【常用数据模型】层次模型、网状模型、关系模型 、面向对象数据模型、对象关系数据模型、半结构化数据模型
×××
层次模型是比网状模型更具普遍性的结构,网状模型是层次模型的一个特例
【层次模型】:1、有且只有一个结点无双亲,是根节点 2、根以外的其他结点有且只有一个双亲
【网状模型】:1、允许一个以上的结点无双亲 2、一个结点可以有多于一个的双亲
-
数据管理技术经历了若干阶段,其中人工管理阶段和文件系统阶段相比
文件系统
的个显著优势是【数据可以长期保存】 -
关系模型
关系:一个关系对应通常说的一张表
元组:表中的一【行】即为一个元组
属性:表中的一【列】即为一个属性
码:唯一确定一个元组,学号
主码:是指从一个或多个码中选其中一个
域:一组具有相同数据类型的值的集合,属性的取值范围来自某个域
分量:元素中的一个属性值
关系模式:对关系的描述
(关系模型要求关系必须是规范化的)
(关系的每一个分量必须是一个不可分的数据项) -
三级模式结构
外模式、模式、内模式
数据库系统的三级模式是对数据进行抽象的三个级别,把数据的具体组织留给DBMS管理
模式
(逻辑模式),是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图
外模式
(子模式/用户模式)数据库用户可以看见和使用的 局部数据 的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示
外模式通常是模式的子集
一个数据库可以有多个外模式
视图对应外模式
同一外模式也可以为某一用户的多个应用系统所使用
但一个应用程序只能使用一个外模式
外模式是保证数据库安全的一个有力措施
内模式
(存储模式/物理模型)
一个数据库只有一个内模式
它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式 -
两层映像
保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性
外模式/模式映像
逻辑独立性
模式/内模式映像
物理独立性 -
在三级模式两层映像结构中,“全局模式”是指【概念模式】,概念模式又称为逻辑模式
eg:三级模式优点:
数据库系统的三级模式结构由外模式、模式和内模式组成 外模式,亦称子模式或用户模式,是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图。 模式,亦称逻辑模式,是数据库中全体数据的逻辑结构和特性的描述,是所有用户的公共数据视图。模式描述的是数据的全局逻辑结构。外模式通常是模式的子集。 内模式,亦称存储模式,是数据在数据库系统内部的表示,即对数据的物理结构和存储方式的描述。 为了能够在内部实现这三个抽象层次的联系和转换,数据库系统在这三级模式之间提供了两级映像:外模式模式映像和模式/内模式映像。正是这两级映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
eg:简述什么是数据与程序的物理独立性?什么是数据与程序的逻辑独立性?为什么数据库系统具有数据与程序的独立性?
逻辑独立性:
当数据的逻辑结构即模式改变时,由数据库管理员对各个外模式/模式的映像作相应改变,可以使外模式保持不变,从而应用程序不必修改,这就是数据与程序的逻辑独立性,简称数据的逻辑独立性。
物理独立性:
当数据库的存储结构改变了,由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,从而应用程序也不必改变,这就是数据与程序的物理独立性,简称数据的物理独立性。
DBMS在三级模式之间提供的两级映像
保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
- 语言
DDL数据定义语言
DML数据操纵语言
从逻辑模型到物理模型的转换一般是由DBMS完成的 - 三类完整性
实体完整性、参照完整性、用户自定义完整性 第一代数据库系统
是指基于网状模型或层次模型的数据库系统
第二代数据库系统
是指基于关系模型的数据库系统- DBA的职责
1、决定数据库中的信息内容和结构 2、决定数据库的存储结构和存取策略 3、定义数据的安全性要求和完整性约束条件 4、监控数据库的使用和运行 5、数据库的改进和重组、重构 - Mysql的安装、配置方法; Mysql数据库操作,通过操作,加深对概念的理解,参看PDF文档《MySQL基础》
第二章 关系数据库
数据模型
的概念:对【现实世界】数据特征的抽象
数据模型
的组成 : 数据结构
、数据操作
和完整性约束
关系模型的三个要素
: 数据结构
、数据操作
和完整性约束
(没有关系运算)
一个关系就是一个Table
某关系R的外键是指:【其它关系的候选键,可以是R中的主属性或非主属性】
若某属性非该关系的主键,却是另外一个关系的主键,则该属性称为【外键】
2.1关系数据结构及形式化定义
-
关系
①域:是一组具有相同数据类型的值的集合(自然数、{男,女}…)
②笛卡尔积:是域上的一种集合运算
③关系:
-
关系三种类型:基本关系(基本表/基表)、查询表、视图表
基本表
实际存在的表,实际存储数据的逻辑表示
查询表
查询结果对应的表
视图表
由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据 -
基本关系的6个性质:
①列是同质的,即每一列中的分量是同一类型的数据,来自同一个域
②不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名
③列的次序可以任意交换
④行的次序可以任意交换
⑤任意两个元组的候选码不能取相同的值
⑥分量必须取原子值,即每一个分量都必须是不可分的数据项
(关系模型要求关系必须是【规范化】的,最基本的一条就是【⑥】,规范化的关系简称为【范式】)
(×××
元组间的候选码可以相同) -
区分【关系】、【关系模式】、【关系数据库】的概念
(关系是关系模式在某一时刻的状态或内容)
关系
是元组的集合动态的、随时间不断变化的
、是值
关系模式
是对关系的描述 R(U,D,DOM,F)静态的、稳定的
、是型
关系数据库
所有关系的集合
2.2关系操作
常用关系操作
:1、查询操作(选择、投影、并、差、笛卡尔积) 2、插入删除修改操作
关系操作特点
:关系操作的特点是集合操作方式,即操作的对象和结果都是【集合】关系操作语言
2.3关系的完整性
实体完整性、参照完整性、用户定义的完整性
实体完整性
:【主属性】不能取空值(不知道/不存在/无意义)参照完整性
:【外码】取空值 or 非空值(基本关系s中某个元组的主码值) (定义外码与主码之间的引用规则)用户定义的完整性
:是针对某一具体关系数据库的约束条件,反应某一具体应用所涉及的数据必须满足的语言要求
2.4关系代数
关系代数是一种抽象的查询语言,用对关系的运算来表达查询
- 选择
- 投影
关系R上的投影是从R中选择出若干属性【列】组成新的关系
投影不仅取消了原关系中的某些列,而且还可能取消某些元组,因为取消了某些属性列后,就可能出现重复行,应取消这些完全相同的行
- 连接
- 除运算
从行和列的角度
题目:
1、 关系运算中花费时间可能最长的运算是【笛卡尔积】
2、关系代数的5种基本基本运算是【并、差、选择、投影、笛卡尔积】
3、参加差运算的两个关系【属性个数必须相同】
4、关系数据操作的对象和结果都是【集合】
5、从关系中挑选出指定的属性组成新关系的运算称为【投影】
6、专门的关系运算包括选择,投影,连接,除运算等。其中从行的角度进行的运算是【选择】
7、关系模型中,一个候选码是【可由一个或多个其值能唯一标识该关系模式中任何元组的属性组成】
8、自然连接是构成新关系的有效方法。一般情况下,当对关系R和S使用自然连接时,要求R和S含有一个或多个共有的【属性】
9、设关系R和S的属性个数分别为n和m,那么R×S操作结果的属性个数为【n+m】
10、设关系R和S的元组个数分别为100和300,关系T是R与S的笛卡尔积,则T的元组个数是【30000】
11、设关系R与关系S具有相同的目数(或称度数),且相对应属性的值取自同一个域,则R- (R-S)等于【R∩S】
12、√
在一个关系模式中,有可能没有非主属性
13、√
给定关系R(X,Y)和S(Y),R和S做除运算时要求R中的属性Y和S中的属性Y必须具有相同的域
14、√
选择运算是从行的角度进行的运算
15、√
任何关系数据库系统都应该支持实体完整性和参照完整性
16、×
一个关系中可以有多个候选码和主码
17、一个关系中往往会有多个候选码,可以指定一个为主码,外码所在的关系叫做参照关系,可以作为候选码的属性也称主属性。
18、√
关系中的不同的列可以来自同一个域
19、√
包含在主码中的属性称为主属性
20、√
自然连接是一种特殊的等值连接
第三章 关系数据库标准语言SQL
结构化查询语言
SQL的特点
:1、综合统一 2、高度非过程化 3、面向集合的操作方式 4、以同一种语法结构提供多种使用方式5、语言简单易学易用
3.1数据定义
三级模式
:模式、外模式、内模式
基本对象
:模式、表、视图、索引
3.2数据查询
SELECT [ALL|DISTINCT] <目标列表达式>
FROM [AS]
WHERE
GROUP BY [HAVING]
ORDER BY [ASC升|DESC降] //默认升
1.单表查询
- 目标表达式: 属性列、表达式2020-age、字符串常量’Year’、函数
- 去掉重复的行: distinct (默认为all)
- 通配符:%任意长度 _任意单个字符
以DB _ 开头的:where cname like 'DB \ _ % i _ _' ESCAPE ' \ ';
order by sdept,sage desc;
- 当聚集函数遇到空值时,除count(*)以外,都跳过空值而只处理非空值
- count(*)是对元组进行计数,某个元组的一个或部分列取空值不影响统计结果
- where作用于基本表或视图 , having作用于组
- 聚集函数只能用于group by中的having语句
- 分组后聚集函数将作用于每一个组,即每一组都有一个函数值
- 求各个课程号及相应的选课人数
select cno,count(sno)
from sc
group by cno;
- 查询选修了三门以上课程的学生学号
select sno
from sc
group by sno
having count(*)>3;
连接查询
①等值与非等值连接
查询每个学生及其选修课程的情况
select student.*,sc.*
from student,sc
where student,sno=sc.sno
//自然连接
select student.sno,sname,ssex,sage,sdept,cno,grade
from student,sc
where student,sno=sc.sno
②自身连接
③外连接
select student.sno,sname,ssex,sage,sdept,cno,grade
from student left outer join sc on(student.sno=sc.sno);
左外连接:列出左边关系中所有的元组
右外连接:列出右边关系中所有的元组
④多表连接
嵌套查询
不相关子查询:子查询的查询条件不依赖于父查询
①带有in谓词的子查询
相关子查询:子查询的查询条件依赖于父查询
②带有比较运算符的子查询
//找出每个学生超过他自己选修课程平均成绩的课程号
select sno,cno
from sc x
where grade>=(select avg(grade)
from sc y
where y.sno=x.sno;
//内层查询是求一个学生所有选修课程平均成绩的
//至于是哪个学生的平均成绩要看参数x.sno的值,
//而该值是与父查询相关的
③带有any(some)或all谓词的子查询
//查询非计算机科学系中比计算机科学系【任意一个学生年龄小】的学生姓名和年龄
select sname,sage
from student
where sage<any(select sage
from student
where sdept='CS')
and sdept<>'CS';
//查询非计算机科学系中比计算机科学系【所有学生年龄小】的学生姓名和年龄
select sname,sage
from student
where sage<all(select sage
from student
where sdept='CS')
and sdept<>'CS';
④带有exisis谓词的子查询
不返回任何数据,只产生逻辑真值“true/false”
//查询【所有】选修了1号课程的学生姓名
select sname
from student
where exists (select *
from sc
where sno=student.sno and cno='1');
//查询【没有】选修了1号课程的学生姓名
select sname
from student
where exists (select *
from sc
where sno=student.sno and cno='1');
//查询选修了全部课程的学生姓名
select sname
from student
where not exists (select *
from course
where not exists (select *
from sc
where sno=student.sno
and cno=course.cno));
//查询至少选修了学生201215122选修的全部课程的学生号码
select distinct sno
from sc scx
where not exists (select *
from sc scy
where scy.sno='201215122'
and not exists (select *
from sc scz
where scz.sno=scx.sno and scz.cno=scy.cno));
集合查询
3.3数据更新
- 插入数据
①插入元组
insert
into
values
//插入新学生元组
insert
into student
values('201215126','张成民','男',18,'CS');
②插入子查询结果
insert
into
子查询;
//对每一个系,求学生的平均年龄,并把结果存入数据库
create table dept_age(sdept char(15)
avg_age smallint);
insert
into dept_age(sdept,avg_age)
select sdept,avg(sage)
from student
group by sdept;
- 修改数据(更新数据)
update
set
where
//修改某一个元组的值
update student
set sage=22
where sno='201215121';
//修改多个元组的值
update student
set sage=sage+1;
//带子查询的修改
update sc
set grade=0
where sno in(select sno
from student
where sdept='CS');
- 删除数据
delete
from
where
//删除某一个元组的值
delete
from student
where sno='201215121';
//删除多个元组的值
delete
from sc;
//带子查询的删除
delete
from sc
where sno in(select sno
from student
where sdept='CS');
3.4空值的处理
不能取空的:not null、unique、码属性
//选修1号课程的不及格的学生以及缺考的学生
select sno
from sc
where grade<60 and cno='1'
union
select sno
from sc
where grade is null and cno='1';
//或者
select sno
from sc
where cno='1' and (grade<60 or grade is null)
3.5视图
- 虚表,只存放视图的定义,不存放视图对应的数据,这些数据仍存放在原来的基本表中
- 一旦基本表中的数据发生变化,从视图中查询出的数据也就随之改变了
- 视图一经定义,就可以和基本表一样被查询,被删除,也可以在一个视图上再定义新的视图,但对视图的更新(增删改)操作则有一定的限制
- 定义视图
①建立视图
create view
as
//建立信息系学生的视图
create view is_student
as
select sno,sname,sage
from student
where sdept='IS';
//建立信息系选修了1号课程的学生的视图(包括学号、姓名、成绩)
create view is_s1(sno,sname,grade)
as
select student.sno,sname,grade
from student,sc
where sdept='IS' and student.sno=sc.sno and sc.cno='1';
//将学生的学号及平均成绩定义为一个视图
create view s_g(sno,gavg)
as
select sno,avg(grade)
from sc
group by sno;
②删除视图
drop view is_s1
- 查询视图
//在信息系学生的视图中找出年龄小于20岁的学生
select sno,sage
from is_student
where Sage<20;
- 更新视图
update is_student
set sname='刘晨'
where sno='201215122'
//插入新的学生记录
insert
into is_student
values('201215129','赵新',20);
//删除记录
delete
from is_student
where sno='201215129'
并不是所有的视图都是可更新的
8. 视图作用
①能够简化用户的操作
②使用户能以多种角度看待同一数据
③对重构数据库提供了一定程度的逻辑独立性
④能够对机密数据提供安全保护
⑤适当利用视图可以更清晰地表达查询
部分作业题
- 集合操作不包括下列哪一项?【D】
A并操作 B差操作 C交操作 D连接操作 - 关于查询的叙述正确的是【可以根据数据库表和已建查询创建查询】
√
在一个表上可以创建一个聚集索引,可以创建多个非聚集索引×
空值就是没有值×
在关系数据库中,所有的视图都可以更新√
子查询的select-语句中不能使用order by 子句(order by 子句只能对最终查询结果排序)√
在SQL语句中,谓词“EXISTS”的含义是存在量词×
数据库的更新操作包括:增、删、改、查询√
SQL语言是关系数据库语言×
DELETE语句删除的是关于表的定义√
如果LIKE后面的匹配串中不含通配符,则可以用=运算符取代LIKE谓词,用!=运算符取代NOT LIKE谓词,×
聚集函数可以在where选择条件中使用√
where子句中不能用聚集函数作为条件表达式,只能用于select子句和group by 中的Having子句√
带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值‘true’或逻辑假值‘false’×
使用INSERT命令一次只能插入一行数据×
嵌套查询都可用连接运算所替代×
视图本身独立存储在数据库中- 查询选修了全部课程的学生的学号:
select sno from student where not exists
( select * from course where not exists
(select * from sc where sc.sno=student.sno and sc.cno=course.cno));