数据库原理学习笔记,祝自己考试顺利。
课程导学
课程知识脉络
第一章,数据库系统概述
第二章,关系数据库
第三章,数据库设计
第四章,SQL与关系数据库基本操作
第五章,数据库编程
第六章,数据库安全与保护
第七章,数据库应用涉及与开发实践
第八章,数据库管理技术的发展
PS:数据库系统概述,关系数据库,数据库设计占选择题的百分之六十。
试卷题型
对不同能力层次要求的分数比例大致为识记占20%,领会占30%,简单应用占30%,综合应用占20%;
易、较易、较难和难比例:2:3:3:2;
主要题型:单项选择题、填空题、简答题、设计题、综合题。
第一章 数据库系统概述
第一节 数据库基本概念
数据
数据(Data)是描述事物的符号记录,是指用物理符号,记录下来的,可以鉴别的信息。
数据库
数据库(Database,简称DB)是长期存储在计算机内、有组织的、可共享的大量数据集合。
数据库中存储的数据具有永久存储、有组织和可共享的三个基本特点。
数据库管理系统
数据库管理系统(Database Management System,简称DBMS)是位于用户与操作系统之间的一层数据管理软件。
主要功能:
数据定义功能
提供数据定义语言(DDL),定义数据库中的数据对象。
例如:表、视图、存储过程、触发器等
数据操纵功能
提供数据操纵语言(DML)操纵数据实现对数据库基本操作。
例如:查询、插入、删除和修改。
数据库的运行管理
保证数据的安全性、完整性、多用户对数据的并发使用以及发生故障后的系统恢复。
数据库的建立和维护功能
创建数据库及对数据库空间的维护、数据库的备份与恢复功能、数据库的重组织功能和性能监视、分析等。
数据组织、存储和管理功能
例如:索引查找、顺序查找。
其他功能
主要包括与其他软件的网络通信功能、不同数据库系统之间的数据传输以及互相访问功能等。
数据库系统
数据库系统(Database System,DBS)是指在计算机中引入数据库技术之后的系统。
通常一个完成的数据库系统包括数据库、数据库管理系统及相关实用工具、应用程序、数据库管理员和用户。
数据库管理员(Database Administrator,DBA)专门负责对数据库进行维护,并保证数据库正常、高效运行。
第二节 数据管理技术的发展
人工管理阶段
特点:
- 数据不保存;
- 应用程序管理数据;
- 数据面向应用;
注意:记录能无结构,整体无结构。
文件系统阶段
特点:
- 数据的管理者:文件系统,数据可长期保存;
- 数据面向的对象:某一应用程序;
- 数据的共享程度:共享性差、冗余度大;
- 数据的结构化:记录内有结构,整体无结构;
- 数据的独立性:独立性差,数据的逻辑结构改变必须修改应用程序;
- 数据控制能力:应用程序自己控制;
数据库系统阶段
特点:
- 数据集成;
- 数据共享性高;
- 数据冗余小;
- 数据一致性;
- 数据独立性高;
- 实施统一管理与控制;
- 减少应用程序开发与维护的工作量;
第三节 数据库系统的结构
数据库系统的三级模式结构
1.模式
模式也称为概念模式或逻辑模式,它是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
2. 外模式
外模式也称为子模式(Subschema)或用户模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述。
DBMS提供子模式的描述语言(Subschema DDL)来严格地定义子模式。
3.内模式
内模式也称为存储模式(Storage Schema),它是对数据库中物理结构和存储方式的描述,是数据在数据库内部的表示形式。
4.三级模式结构的两层映像与数据独立性
- 外模式/模式映像(逻辑独立性)
- 模式/内模式映像(物理独立性)
数据库系统的运行与应用结构
1. 客户/服务器(Client/Server,简称C/S)模式
例如:QQ、桌面客户端游戏、微信。
2.浏览器/服务器(Browser/Server,简称B/S)模式
例如:网站、在线web游戏。
第四节 数据模型
数据特征与数据模型组成要素
数据结构
数据结构描述的是系统的静态特性,即数据对象的数据类型、内容、属性以及数据对象之间的联系。
数据操作
数据操作描述的是系统的动态特性,是对各种对象的实例允许执行的操作的集合,包括操作及有关的操作规则。
数据的约束条件
数据约束描述数据结构中数据间的语法和语义关联,包括相互制约与依存关系以及数据动态变化规则,以保证数据的正确性、有效性与相容性。
数据模型的分类
1.概念层数据模型
信息世界中的基本概念
实体(Entity)
客观存在并可相互区别的事物称为实体。可以是具体的人、事、物或抽象的概念。
属性(Attribute)
实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。
码(Key)
唯一标识实体的属性集称为码。
域(Domain)
属性的取值范围称为该属性的域。
实体型(Entity Type)
用实体名及其属性名集合来抽象和刻画。同类实体称为实体型。
实体集(Entity Set)
同型实体的集合称为实体集。
联系(Relationship)
现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部联系,和实体之间的联系。
实体型间联系:
**一对多 1:N** **一对一 1:1** **多对多 N:M**
概念模型的表示方法
概念模型:用来描述现实世界的事物,与具体的计算机系统无关。
最典型的概念模型是实体联系(E-R)。
2.逻辑层数据模型
- 层次模型;
- 网状模型;
- 关系模型;(重点)
- 面向对象模型;
3.物理层数据模型
物理层数据模型,也称为数据的物理模型(Physical Model),其描述数据在存储介质上的组织结构,是逻辑模型的物理实现,即每一种逻辑模型在实现时都有与其相对应的物理模型。
小结
本章概述了数据库相关的基本概念,并通过对数据管理技术发展历程的介绍,阐述了数据库技术产生和发展的背景,以及数据库系统的特点,同时详细介绍了数据库的三级模式结构和运行与应用结构,最后重点介绍了数据模型的概念、组成要素与分类。
本章学习重点
- 数据库系统的三级模式结构;
- 数据模型中概念层模型(E-R模型)与逻辑层模型(关系模型);
第二章 关系数据库
第一节 关系数据库概述
- 1970年,E·F·Codd 提出关系数据模型;
- 之后,提出了关系代数和关系演算的概念;
- 1972年,提出了关系的第一范式,第二范式,第三范式;
- 1974年,提出了关系的BC范式;
第二节 关系数据库模型
关系数据结构
关系模型的数据结构非常简单,只包含单一的数据结构,即关系。
基础属于
表(Table)
表,也称为关系,是一个二维的数据结构。
关系(Relation)
一个关系逻辑上对应一张二维表,可以为每个关系取一个名称进行标识。
列(Column)
表中的列,也称作字段(Field)或属性(Attibute)
属性(Attribute)
同“列”;表中属性的个数称为关系的元或度。
行(Row)
表中的行(Row),也称作元组(Tuple)或记录(Record)。
元组(Tuple)
表中的一行即为元组。
分量(Component)
元组中的一个属性值,称为分量。
码或键(Key)
在一个关系中,能唯一标识该元组的属性称为该关系的码或键。
超码或超键(Super Key)
如果在关系的一个码中移去某个属性,它仍然是这个关系的码,则称这样的码或键为该关系的超码或超键。
候选码或候选键(Candidate Key)
如果在关系的一个码或键中,不能从中移去任何一个属性,否则它就不是这个关系的码或键,则称这样的码或键为该关系的候选码或候选键。
主码或主键(Primary Key)
在一个关系的若干个候选码或候选键中指定一个用来唯一标识关系的元组,则称这个被指定的候选码或候选键为该关系的主码或主键。
全码或全键(All-Key)
一个关系模式的所有属性集合是这个关系的主码或主键,则成这样的主码或主键为全码或全键。
主属性(Primary Attribute)和非主属性(Nonprimary Attribute)
关系中包含在任何一个候选码中的属性称为主属性,不包含在任何一个候选码中的属性称为非主属性。
外码或外键(Foreign Key)
当关系中的某个属性不是这个关系的主码或候选码,而是另一关系的主码时,称该属性为这个关系的外码或外键。
参照关系和被参照关系
域(Domain)
表示属性的取值范围。
数据类型(Data Type)
表中每个列都有相应的数据类型,它用于限制该列中存储的数据。
关系模式(Relation Schema)
关系数据库(Relation Database)
关系数据库是以关系模型作为数据的逻辑模型,并采用关系作为数据组织方式的一类数据库,其数据库操作建立在关系代数的基础上。
关系操作集合
1.基本的关系操作
查询
选择、投影、连接、除、并、交、差、笛卡尔积
数据更新
插入、删除、修改
查询的表达能力很强,是其中最重要的部分。
关系操作的特点
集合操作方式,即操作的对象和结果都是集合。
2.关系数据语言的分类
关系操作的能力可以用两种方式来表达:代数方式和逻辑方式。
代数方式主要有关系代数,它是通过对关系的操作来表达查询要求的方式;
逻辑方式主要有关系演算,它是用谓词来表达查询要求的方式。
具有关系代数和关系演算双重特点的语言:SQL。
3.关系的完整性约束
实体完整性约束(Entity Integrity Constraint)
实体完整性约束是指关系的主属性,即主码的组成不能为空,也就是关系的主属性不能是空值NULL。
参照完整性约束(Referential Integrity Constraint)
参照完整性主要保证表与表之间的数据正确,限制属性关系。
用户定义完整性约束(User-defined Integrity Constraint)
关系模型完整性约束的检验
第三节 关系数据库的规范化理论(重点)
关系模式中可能存在的冗余和异常问题
- 数据冗余
- 更新异常
- 插入异常
- 删除异常
函数依赖与关键字
设R为任一给定关系,如果对于R中属性X的每一个值,R中的属性Y只有唯一值与之对应,则称X函数决定Y或称Y函数依赖于X,记作X–>Y。其中,X称为决定因素。
1.完全函数依赖
2.部分函数依赖
3.传递函数依赖
4.关键字
范式与关系规范化过程
满足最低要求的称为第一范式,简称1NF,这是最基本的范式;
在第一范式的基础上进一步满足一些新要求的称为第二范式(2NF);
以此类推,再进一步的范式是第三范式(3NF)及其改进形式BCNF(Boyce-Codd Normal Form);
1NF
2NF(消除非主属性对码的部分函数依赖)
3NF(消除非主属性对码的传递函数依赖)
关系规范化理论的应用
关系规范化理论主要应用于数据库设计中的概念设计趵段,对所产生的概念设计,可用它来分析其实体划分是否适合,判断属性分配到哪个实体中更为合理。在实现设计中当将E-R图向关系模型转换时,还可以用它来分析并发现概念设计中可能存在的遗漏或不当之处,特别是练习实体是否不单独转换为一独立关系而集成到与之相联的基本实体中去处理时,规范化理论是最有效的评价标准。
小结
本章首相概述了关系数据库的基本特征、产生和发展历程,然后分别介绍了关系数据模型的三个要素,即关系数据结构、关系操作集合和关系完整性约束,最后详细介绍了关系数据库的规范化理论。
学习重点
- 关系数据库的相关概念;
- 关系规范化理论,各个范式之间的转化关系;
第三章 数据库设计
第一节 数据库设计概述
数据库的生命周期
数据库的生命周期可分为两个阶段,分别是数据库分析与设计阶段、数据库实现与操作阶段。
其中,数据库分析与设计阶段包括需求分析、概念设计、逻辑设计和物理设计四个环节;数据库实现与操作阶段包含数据库的实现、操作与监督、修改与调整三个子阶段。
数据库设计的目标
数据库涉及具有两个十分重要的目标,即满足应用功能需求和良好的数据库性能。
数据库设计的内容
数据库设计是从用户对数据的需求出发,研究并构造数据库的过程,其中包含两个方面的内容:
- 数据库结构设计;
- 数据库行为设计;
数据库设计的方法
- 直观设计法
- 规范设计法
- 新奥尔良设计方法
- 基于E-R模型的数据库设计方法
- 基于第三范式的设计方法
- 计算机辅助设计法
- UML(visio,powerdesigner)
数据库设计的过程
第二节 数据库涉及的基本步骤
需求分析
1.确定数据库范围
数据库涉及的第一项工作就是要确定数据库范围,即确定数据库应支持哪些应用功能。
2.应用过程分析
应用过程分析是指了解并分析数据与数据处理间的关系。
在数据库范围确定之后,数据库涉及人员应逐次地了解和分析每一部门或功能要用到哪些数据、数据使用的顺序、对数据作何处理和处理策略以及处理的结果等。
3.收集与分析数据
静态结构
数据的静态结构是指不施加应用操作于其上时数据的原始状况,这可通过数据分类表和数据元素表进行说明。
动态结构
动态结构是指将应用操作施加于数据之上后数据的状况,可通过任务分类表和数据操作特征表进行说明。
数据约束
数据约束是指使用数据时的特殊要求。
4.编写需求分析报告
需求分析报告通常包含如下内容:
- 数据库的应用功能目标;
- 标明不同用户视图范围;
- 应用处理过程需求说明;
- 数据字典;
- 数据量;
- 数据约束;
概念结构设计
概念结构设计的任务是在需求分析中产生的需求分析报告的基础上,按照特定的方法设计满足应用需求的用户信息结构,该信息结构通常称为概念模型。
其中采用E-R图作为概念模型的描述工具。
逻辑结构设计
物理设计
物理设计是指对于一个给定的数据库逻辑结构,研究并构造物理结构的过程,其具体任务主要是确定数据库在存储设备上的存储结构及存取方法,因DBMS的不同还可能包括建立索引和聚焦,以及物理块大小、缓冲区个数和大小、数据压缩的选择等。
数据库实施
- 加载数据
- 应用程序设计
- 数据库试运行
数据库运行和维护
只有经过试运行之后,确认系统无故障或暂未发现故障时,系统才能投入到生产实际中运行。数据库系统投入实际运行标志着数据库设计和应用开发的基本完成,但绝不意味着设计和应用开发工作的终止。
系统维护中最困难的工作是数据库重组与重构。
第三节关系数据库设计方法
关系数据库涉及过程与各级模式
概念结构设计方法
1.关系
一对一;一对多;多对多;
2.局部信息结构设计
- 确定局部范围;
- 选择实体;
- 选择实体的关键字属性;
- 确定实体间的联系;
- 确定实体的属性;
3.全局信息结构设计
- 属性冲突
- 命名冲突
- 结构冲突
逻辑结构设计方法
- E-R图向关系模型的转换;
- 数据模型的优化;
- 设计用户子模式;
物理设计方法
- 建立索引
- 建立聚集
小结
本章首先概述了数据库设计相关的知识,包括数据库的生命周期、数据库设计的目标、内容、方法与过程,然后具体介绍了数据库设计的几个基本步骤,即需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库的运行和维护,最后重点介绍了关系数据库的概念结构设计与逻辑结构设计过程中所涉及的关键技术与方法。
学习重点
关系数据库设计的具体方法与步骤。
难点:使用E-R图进行数据库概念设计的过程,以及其向关系模型转换的方法。
第四章 SQL与关系数据库基本操作
第一节 SQL概述
SQL的发展
结构化查询语言(Structured Query Language,简称SQL)是一种介于关系代数和关系演算之间的语言。
SQL的特点
- SQL不是某个特定数据库供应商专有的语言。
- SQL简单易学;
- SQL尽管看上去很简单,但它实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作
SQL的组成
- 数据定义语言(Data Definition Language,DDL)
- 数据操纵语言(Data Manipulation Language,DML)
- 数据控制语言(Data Control Language,DCL)
- 嵌入式和动态SQL规则
- SQL调用和会话规则
第二节 MySQL预备知识
MySQL使用基础
LAMP(Linux+Apache+MySQL+PHP)
WAMP(Windows+Apache+MySQL+PHP)
MySQL中的SQL
1. 常量
字符串常量,数值常量(整数常量和浮点数常量),十六进制常量,日期时间常量,位字段值,布尔值,NULL值
2. 变量
用户变量(set @xxx=10),系统变量(@@xxx)
3.运算符
算数运算符(+, -, * /, %),位运算符(&, |, ^, ~, >>, <<),比较运算符(=, <=, >=, >, <, <>|!=),逻辑运算符(not,and,or)
4.表达式
表达式就是常量、变量、列名、复杂计算、运算符和函数的组合。一个表达式通常可以得到一个值。
5. 内置函数
聚合函数,例如count()函数;类型转换函数,例如cast()函数;系统信息函数,例如user()函数和version()函数。
第三节 数据定义
数据库模式定义
1. 创建数据库
1 | create {database|schema} [if not exists] db_name |
2. 选择数据库
1 | use db_name; |
3. 修改数据库
1 | alter {database|schema} [db_name] alter alter_specification[,alter_specification] |
4. 删除数据库
1 | drop database [if exists] db_name; |
5. 查看数据库
1 | show [databases|schemas]; |
表定义
数据库的类型
数值类型
- 整数类型 int
- 浮点类型 float double decimal
日期和时间类型
- 日期类型 date(yyyy-mm-dd) year
- 日期时间类型 datetime time
- 时间戳类型 timestamp
字符串类型
- 固定长度类型 char 最大长度255
- 可变长度类型 varchar 最大长度65535
- 文本类型 text
1. 创建表
1 | create table [if not exists] tbl_name(字段名 数据类型[列级完整性约束],.... |
2. 添加字段
1 | alter table tb_name add [column] 新字段名 数据类型[约束条件] [first|after 已有字段名] |
3. 修改字段
1 | alter table tb_name modify 新字段名 数据类型[约束条件] |
4. 删除字段
1 | alter table tb_name drop 字段名 |
5. 重命名表
1 | rename table 原表名 to 新表名; |
6. 删除表
1 | drop table [if exists] tb_name; |
7. 查看表
1 | show tables [{from|in} db_name]; |
8. 查看表结构
1 | show columns {from|in} tb_name [{from|in} db_name]; |
索引定义
索引可以理解成目录,在查找时有目录查找速度会加快。
索引的种类
- 用途划分
- 普通索引(INDEX)
- 唯一性索引(UNIQUE)
- 主键索引(PRIMARY KEY)
- 全文索引(FULLTEXT) [myisam引擎]
- 聚簇索引 [innodb引擎]
- 列级索引
- 单列索引
- 组合索引
1. 索引的创建
1 | create index idnex_name on tbl_name(col_name[(length)][asc|desc],...); |
2. 索引的查看
1 | show {index|indexs|keys} {from|in} tbl_name [{from|in} db_name]; |
3. 索引的删除
1 | drop index index_name on tbl_name; |
第四节 数据更新
插入数据
1 | insert into tb_name(column_list) values (value_list); |
删除数据
1 | delete from tb_name [where <condition>]; |
修改数据
1 | update tbl_name set col_name=expr [where where_definition]; |
第五节 数据查询
SLECT语句
1 | select |
子句 | 说明 | 是否必须使用 |
---|---|---|
SELECT | 要返回的列或表达式 | 是 |
FROM | 从中检索数据的表 | 仅在从表选择数据时使用 |
WHERE | 行级过滤 | 否 |
GROUP BY | 分组说明 | 仅在按组计算聚合时使用 |
HAVING | 组级过滤 | 否 |
ORDER BY | 输出排序顺序 | 否 |
LIMIT | 要检索的行数 | 否 |
列的选择与指定
1. 选择指定的列
2. 定义并使用列的别名
3. 替换查询结果集中的数据
4. 计算列值
5. 聚合函数
函数名 | 说明 |
---|---|
count | 求组中项数,返回int类型整数 |
max | 求最大值 |
min | 求最小值 |
sum | 返回表达式中所有值的和 |
avg | 求组中值的平均值 |
std | 返回给定表达式中所有值的标准值 |
variance | 返回给定表达式中所有值的方差 |
group_concat | 返回由属于一组的列植连接组合而成的结果 |
FROM子句与多表连接查询
- 交叉连接
- 内连接
- 外连接(左连接,右连接)
WHERE子句与条件查询
查询条件 | 操作符 |
---|---|
比较 | =, <>, !=, <, <=, >, >=, !<, !>, not |
确定范围 | between and, not between and |
确定集合 | in, not in |
字符匹配 | like, not like |
空值 | is null, is not null |
多重条件 | and, or |
子查询
1 | where 列名 in (值列表或者子select[但必须只有一列]) |
HAVING子句
在select语句中,除了能使用GROUP BY子句分组数据之外,还可以使用HAVING子句来过滤分组,即在结果集中规定包含哪些分组和排除哪些分组。
ORDER BY子句
1 | [order by 字段 [asc | desc]] |
LIMIT子句
1 | limit [位置偏移量] 行数 |