导图社区 数据库原理
数据库教材:《数据库系统概论(第5版)》的思维导图,包括并发控制、数据库恢复技术、数据库编程、数据库设计、关系数据库设计理论、数据库完整性等等。
编辑于2022-08-10 11:38:11 上海数据库原理
绪论
概念
数据库系统概述
数据库的4个基本概念
数据(Data)
数据库中存储的基本对象 一条记录就是一个数据
数据库(DB:Database)
数据库是相互关联的数据的集合,以一定的组织方式(数据模型)将数据组织起来存储在磁盘上,与应用程序彼此独立,为多个用户共享
数据库管理系统(DBMS)
用于管理数据库的软件系统,完成对数据库的操作 是用户与数据库交互的桥梁
数据定义功能
DDL(数据定义语言)
定义数据库中的数据对象
数据操纵功能
DML(数据操纵语言)
实现对数据库的增删改查
数据控制功能
安全性/完整性/并发/系统恢复
数据管理和维护功能
数据库初始数据装入/数据库转储/数据库的重组织及性能监视
数据库系统(DBS)
狭义:由数据库及数据库管理系统和相关应用程序组成 广义:由DB、DBMS及其相关应用程序、DBA组成的存储、管理、处理和维护数据的系统,
DB
DBMS及其开发工具、应用程序
应用程序
DBA
数据库系统的组成
数据库管理技术的生产和发展
动力:应用需求/硬件发展/软件发展
人工管理
20世纪40-50年代
批处理
文件系统
20世纪50-60年代
实时联机处理
批处理
数据库系统
1.数据结构化 2.数据的共享性高,冗余度低且易扩充 3.数据独立性高 4.数据由数据库管理系统统一管理和控制
处理方式
实时联机处理
分布处理
批处理
特点
数据结构化
数据的共享性高,冗余度低且易于扩展
节省空间,避免数据之间的不相容和不一致性
数据独立性高
由数据库管理系统的二级映像功能保证
物理独立性
逻辑独立性
数据由数据库管理系统统一管理和控制
数据库安全性
数据库完整性
并发控制
数据库恢复
模型
三类模型
对现实世界数据特征的抽象 从现实世界到信息世界 从信息世界到计算机世界
概念模型 /信息模型
按用户的观点对数据和信息建模,用于数据库设计 由数据库设计者完成
实体(Entity)
事物
属性(Attributes)
信息,有型(Type)和值(Value)之分
域(Domain)
属性的取值范围
实体键/码(Entity Key)
唯一标识一个实体的属性或属性集合
实体型(Entity Type)
实体名及其属性名集合,用来抽象和刻画同类实体
实体集(Entity Set)
性质相同的同型实体的集合
联系(Relationship)
一对一 一对多 多对多
属性名之间的联系
实体型之间的联系
实体模型
逻辑模型
按计算机系统的观点对数据建模 数据库设计人员在工具协助下完成从概念模型到逻辑模型
数据模型
狭义只指逻辑模型
物理模型
DBMS完成从逻辑模型到物理模型(基本的存取数据)
信息模型/概念模型的建模方法E-R图
E-R图(Entity-Relationship)方法
实体型用矩形表示
属性用椭圆形表示
联系用菱形表示,放在实体与属性的无向边上
联系:例如 有/组成/选修......
数据模型的组成三要素
数据模型是用来结构化组织数据的 反应数据库中数据及数据之间联系的结构形式
数据结构
描述数据库的组成对象以及对象之间的联系
静态特性
字段(Field)
对应于属性的数据,也称为数据项
记录(Record)
对应于每个实体的记录
文件(File)
对应于实体集的数据
数据操作
对数据库各种对象(型)的实例(值)允许执行的操作及相关操作规则
动态特性
数据的完整性约束
一组完整性规则的集合
完整性规则
给定的数据模型中数据及其联系应满足的制约和储存规则 保证数据的正确、有效、相容
常用的逻辑数据模型
层次模型
任何记录值只有按其路径查看时,才能显出它的全部意义 实际上是网状模型的一个特例
树结构
网状模型
图结构
关系模型
每个二维表都是关系,所以关系模型是“关系框架”的集合
二维表结构
关系模型的数据结构
关系必须是规范化的,最基本的规范条件是关系中的分量不可再分
关系
表
元组
行
属性
列
主码
可以唯一确定一个元组的属性组
域
属性值的取值范围
分量
元组中的一个属性值,不可再分
关系模式
对关系的描述
关系名
表名
关系模型的操作
增删改查
关系模型的完整性约束
实体完整性
参照完整性
用户定义的完整性
面向对象模型
以对象为单位存储数据
数据库系统的结构
数据库系统模式的概念
型与值
模式与实例
数据库系统的三级模式结构
外模式
也称子模式/用户模式 用户使用的局部数据的逻辑结构和特征的描述 介于模式与应用之间 模式通常对应多个外模式 一个外模式可以对应多个应用 保证了数据库安全性
模式
也称逻辑模式 数据的逻辑结构+联系+安全性完整性要求
内模式
也称存储模式 是数据在数据库内部的表示方式 一个数据库只有一个内模式
在一个数据库中唯一
数据库的二级映像和数据独立性
外模式/模式映像
保证数据的逻辑独立性 模式改变时,对外模式/模式映像做相应改变,使外模式不变 应用程序根据外模式编写,因此不必修改程序
逻辑独立性
应用程序与数据库的逻辑结构相互独立
模式/内模式映像
定义了数据全局逻辑结构与存储结构之间的对应关系 保证了数据的物理独立性 数据库存储结构改变时,修改模式/内模式映像,使模式不变 从而应用程序也不受影响
物理独立性
应用程序与存储在磁盘上的数据库中的数据是相互独立的
数据库系统的组成
关系数据库
RDBMS:关系数据库管理系统
重点
关系数据结构及形式化定义
关系及相关概念
关系的逻辑结构:二维表
域
笛卡儿积
可表示为一张二维表 表的每列对应一个域
元组(t)
分量
基数
一个域允许的不同取值的个数
关系(R)
可看作是笛卡儿积的子集 R(D1,D2,...,Dn) R:关系名 n:关系的目或度(即属性的个数)
单元关系与二元关系
单元/一元关系:n=1
二元关系:n=2
关系的表示
二维表
属性
n目关系必有n个属性
码
码
能唯一标识元组的属性组
候选码
能唯一标识一个元组的最少的属性组
少其中任何一个属性都不能唯一标识
全码
当候选码包含所有属性组时称为全码
主码
关系中有多个候选码,选定其中一个为全码
主属性
候选码中的属性,否则称非主属性
三类关系
基本表/关系
实际存在的表
查询表
查询结果对应的表
视图表
由基本表或其他视图表导出的表,虚表
基本关系的性质
列是同质的
不同列可以出自同一个域
列的顺序无所谓
行的顺序无所谓
任意两个元组的候选码不能相同
分量必须取原子值/即不可再分
关系模式
关系模式是型 关系是值 关系模式=逻辑结构+联系+完整性约束条件
定义:R(U,D,DOM,F)
R 关系名 U 属性名集合 D U中属性来自的域 DOM 属性向域的映像集合 F 属性间数据的依赖关系的集合
关系模式与关系
关系数据库
所有关系的集合
型:关系模式
值:关系模式在某一时刻对应的关系的集合,通常称为关系数据库
关系模型的存储结构
物理组织
一个表对应一个操作系统
从操作系统一次性申请若干个大文件,自己划分
关系操作
基本的关系操作
常用的关系操作
查询操作
选择
投影
并
差
笛卡儿积
数据更新
插入
删除
更改
关系操作的特点
操作的对象和结果都是集合,一次一集合的方式
关系数据语言的分类
关系代数语言
对关系的运算来表达查询要求
关系演算语言
用谓词来表达查询要求
具有关系代数和关系演算双重特点的语言如SQL
SQL:Structured Query Language 集合操作,语言具有完备的表达能力 非过程化的、描述性的语言 不需要用户选择存取路径
关系的完整性约束
为了维护数据库中数据与现实世界的一致性
实体完整性
主码不空
全部或部分属性都不能为空 (现实世界中的事物是可区分的)
参照完整性
外码存在或全取空值
关系间的引用
参照关系与被参照关系
外码:引用来自其他关系的码,可能不是本关系的码
foreign key
由关系系统自动支持
用户定义的完整性
具体领域的约束条件
关系代数
运算对象是关系 运算结果亦是关系
运算对象
关系
运算符
集合运算符
行角度进行计算
并
实现记录的添加和删除
差
R-S:属于R但不属于S的所有元组
实现记录的删除
交
属性数不变,且要求是同类关系
笛卡儿积
用于关系的连接
属性数为两关系之和,不要求是同类关系
专门的关系运算符
铺垫知识
元组的连接
象集
Zxi表示R中X属性组上值为xi的诸元组在Z属性组上分量的集合 特定的xi值对应的所有的z的值 本质是一次选择运算+一次投影运算
用于辅助的其他运算符
比较运算符
大于、大于等于、小于、小于等于、等于、不等于
逻辑运算符
与、或、非
选择
此处的等号可以换做任意比较运算符
行的角度进行计算
投影(去重)
将互异的属性值投影出来(列的形式)
列的角度进行计算
连接
等值连接
从广义笛卡儿积中选取 从行的角度进行计算 如:在笛卡儿积中选择R中A=S中B的元组,RA和SB被看做不同的属性列
自然连接(去重)
是特殊的等值连接 两个关系中有相同的属性组时,将以这个相同属性组作为等值连接的条件 并在结果中去掉多余的重复属性列,只保留一个
外连接
保留悬浮元组,在其他没有对应上的属性值填空值
左外连接
只保留运算符左侧关系R中的悬浮元组
右外连接
只保留运算符左侧关系S中的悬浮元组
除运算
R÷S:在R关系中找出包含S关系中全部Y(R、S的公共属性组)属性值的那些元组对应的X(在R中不在S中的属性组)属性值
先求象集
同时从行列的角度进行计算
运算结果
关系
MySQL
重点、难点
SQL概述
SQL的产生和发展
数据定义
数据操纵
增删改
数据查询
数据控制
包括对数据的安全性控制、完整性规则的描述以及对事务的控制语句
SQL的特点
综合统一
DDL(数据定义语言)
DML(数据操纵语言)
DCL(数据控制语言)
DQL(数据查询语言)
高度非过程化
存取路径的选择以及SQL的操作过程由系统自动完成
不像其他DML必须指定存取路径
面向集合的操作方式
操作的对象是集合
以同一种语法结构提供两种使用方式
独立的语言
也可以嵌入其他高级语言中
SQL功能极强,易学易用
SQL的基本概念
外模式
视图
从一个或几个基本表导出的表 数据库中只存放视图的定义而不存放视图对应的数据 视图是一个虚表 用户可以在视图上再定义视图
模式
基本表
本身独立存在的表 SQL中一个关系对应一个基本表 一个(或多个)基本表对应一个存储文件 一个表可以带若干索引
内模式
存储文件/基本表的索引
存储文件的逻辑结构组成了关系数据库的内模式 存储文件的物理结构对用户是隐蔽的 索引也是存放在存储文件中
数据定义(DDL)
表空间(数据库)
create database|schema if not exists xxx alter database xxx default character set='utf8';
UTF-8、UTF-16、UTF-32是Unicode码的不同实现形式,都属于Unicode编码
基本表
数据类型
字符类型数据
CHAR(n)
定长字符串,不足补空白字符
VARCHAR(n)
变长字符串,占用大小以实际输入为主
TEXT
MEDIUMTEXT
LONGTEXT
文本
数值类型数据
int
4byte
bigint
8byte
smallint
2byte
tinyint
1byte
decimal(p,s)
p:整数位和小数位位数和 s:小数位位数
日期时间型数据
date
YYYY-MM-DD
datetime
YYYY-MM-DD HH:MM:SS
TimeStamp
从1970-01-01 00:00:00到当前的时间差
Time
YEAR
1901-2155
null
索引
DBA或建表者可以建立索引 对于查询多的表应该建索引 优点: 加快数据的检索速度 创建唯一性索引,保证数据记录的唯一性 实现表与表之间的参照完整性 加速表与表之间的连接 使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间 缺点: 占用磁盘空间 减缓数据修改速度
分类
按数据的存储结构分
聚集索引
一个表只能有一个聚集索引(一般为主键) 指索引项的顺序与表中记录的实际顺序一致 检索到索引项的位置即是记录的位置
非聚集索引
二级索引 建立一个由指针构成的索引文件 通过非聚集索引可以查到记录对应的主键值 再由主键值查到对应的记录
按数据的唯一性分
唯一索引
与主键的特性类似 区别在于
非唯一索引
按键列的个数分
单列索引
多列索引/复合索引/多重索引
从左到右有序
索引的建立修改删除
create [unique|fulltext|spatial] index IndexName on TableName (Coulmn1 ASC|DESC,Column2,...); alter table TableName drop|add index xxx(column_name); drop index IndexName on TableName;
视图
虚表,是从一个或几个基本表(或视图)导出的表 数据库中只放视图的定义,因此不会出现数据冗余
视图的使用
定义视图
查询视图
操作和基本表一样
视图消解法
更新视图
删除视图
可一次删除多个,逗号隔开 drop view viewName;
视图的种类
单表视图
AS后的子查询来自一张表
多表视图
AS后的子查询来自多表连接
视图的视图
AS后的子查询来自视图
虚拟列视图:带表达式/计算式的视图
产生计算列的select
分组视图:含GROUP子句及聚集函数
使用GROUP/聚集函数的select
视图的作用
简化用户操作 以多种角度看待同一数据,适应共享的需要 体现逻辑独立性 保护机密数据 更清晰的表达查询
数据查询(DQL)
常见语句
一般步骤
select(投影)
查询指定列
查询全部列
产生计算列
year()
YEAR(<日期型表达式>):从日期表达式中求出年份 类似的有MONTH()、Day()
Now()
返回系统日期时间
产生常量列
增加属性标记
过滤重复元组
distinct
where(选择)
比较大小
字符类型也用= 不要与字符匹配混淆
确定范围
确定集合
字符匹配
特指涉及通配符时 一般判断相等用=即可 使用 like / not like 进行比较
% 代表任意长度(包括零)字符串的通配符
_ 代表任意单个字符的通配符
查询的字符串中有通配符时,用 \ 转义
查询空值
不可使用等号比较
is null / is not null
多重条件查询
括号优先级最高
order by
缺省为升序
聚集函数
group by
having 聚集函数+条件
having必须和group子句连用
查询方式
单表查询
连接查询
等值连接查询
用where子句建立连接关系
自身连接查询
把自身当做两张表,然后进行等值连接
内/外连接查询
在from子句中使用连接关键字建立连接条件 将连接条件和查询条件分开 等值连接等价于在on子句中写上where中的某条件
inner join
内连接(默认)
left outer join
保留左表所有记录
on
生成临时表时使用的条件,无论on中条件是否为真,都会返回左表中所有记录
where
在临时表生成好后,再对临时表进行过滤。所以条件不为真的就全部过滤
right outer join
保留右表所有记录
full outer join
完全外连接
嵌套查询(子查询)
将一个查询块嵌套在另一个查询块的WHERE子句、HAVING条件或其他位置的查询 好处:效率高、不涉及多表连接、将复杂问题简单化 层层嵌套体现了SQL结构化的含义所在
使用IN谓词的子查询
将select子查询放入in()中 从里向外执行 子查询通常返回一个集合
使用比较运算符的子查询
适用于子查询返回单值时
使用SOME|ALL谓词的子查询
适用于子查询返回多值时的比较查询 事实上,聚集函数的效率更高
some
all
不相关查询
使用EXISTS谓词的子查询
从外向里查询, 子查询依赖父查询带入的相关属性值 子查询的结果又作为父查询的查询条件
相关查询
集合查询
MySQL不支持集合运算符(Except/Union......),可用其他语句实现相同的效果
基于派生表的查询
子查询出现在from子句中
数据更新(DML)
基本操作
插入数据
修改数据
不写where子句将默认对所有记录操作
删除数据
批量更新
批量插入
用select子句实现
批量修改
用where子句实现
批量删除
用where子句实现
复制数据表
数据库安全性
数据库共享的特点带来安全性问题 即不合法的使用造成的数据泄露、更改或破坏 系统安全保护措施是否有效是数据库系统主要的性能指标之一
数据库安全性概述
数据库的不安全因素
非授权用户对数据库的恶意存取和破坏
数据库中重要或敏感的数据被泄露
安全环境的脆弱性
安全标准简介
TCSEC
CC
数据库安全性控制常用方法
非法使用数据库的情况: 编写合法程序绕过DBMS及其授权机制,通过操作系统直接获取 直接或编写应用程序执行非授权操作 通过多次合法查询数据库从中推导出一些保密数据
用户身份鉴别
静态口令鉴别
动态口令鉴别
生物特征鉴别
智能卡鉴别
存取控制
确保只授权有资格的用户访问数据库的权限 同时令所有未被授权的人员无法接近数据 存取控制机制组成 定义用户权限 合法权限检查
自主存取控制方法(DAC)
C2级 用户对不同的数据对象有不同的存取权限 不同用户对同一对象也有不同的权限 用户还可以将其拥有的存取权限转授给其他用户 缺点: 可能存在数据的无意泄露,因为数据本身并没有安全性标记 应该对系统控制下所有的主客体实施强制存取控制策略
创建数据库用户
授权:授予与收回
grant
with grant option //权限传播 不允许循环授权
revoke
数据库角色
被命名的一组与数据库操作相关的权限 角色是权限的集合 可以为一组具有相同权限的用户创建一个角色 简化授权的过程
角色的创建
create role RoleName;
角色的授予与授权
数据库角色授予,便于批量操作: grant RoleName to user1,user2,...; revoke RoleName from user1; 数据库角色权限修改,基本与用户权限授予一致: grant delete on TableName to RoleName;
强制存取控制方法(MAC)
B1级 每一个数据对象被标以一定的密级 每一个用户也被授予某一个级别的许可证 对于任意一个对象,只有具有合法许可证的用户才可以存取
视图机制
审计
数据加密
存储加密
传输加密
其他安全性保护
推理控制
隐蔽信道
数据隐私保护
数据库完整性
重点
完整性概念
防止数据库中存在不符合语义的数据 防止数据库中存在不正确的数据
数据正确性
数据相容性
实体完整性
针对主码 插入时将检查:主码非空且唯一
列级约束条件
单属性码的说明方法 直接在属性后写primary key定义
表级约束条件
多属性码的定义
违约处理
不予执行
参照完整性
针对外码
定义
使用foreign key修饰,references指明被参照的是那张表的主码
违约处理
可以在定义表时显式说明参照完整性的违约处理 on delete cascade 级联删除被参照表中的元组
用户定义的完整性
属性上的约束条件的定义
列级
NOT NULL
UNIQUE
CHECK(表达式)
eg:Ssex CHAR(2) check (Ssex in ('男','女'));
属性上的约束条件检查和违约处理
RDBMS检查|不予执行
元组上的约束条件的定义
表级 定义属性之间的约束关系
元组上的约束条件检查和违约处理
RDBMS检查|不予执行
完整性约束命名子句
可以alter表add约束
触发器
用户定义在关系表上的一类由事件驱动的特殊过程 服务器自动激活,不能直接调用 进行更为复杂的检查和操作,具有更强大的数据控制能力 定义在特定表上,与表相关 是一个事务(可回滚) 通常 用于强制业务规则 触发器是在对表进行插入、更新或删除操作时自动执行的存储过程 是一种高级约束
定义触发器
insert/update/delete触发器
new
将要或已经插入的数据
old
原数据
激活触发器
由触发事件激活
Before触发器
After触发器
删除触发器
drop trigger TriggerName on TableName;
关系数据库设计理论
重点、难点
关系数据库规范化理论
R的五元组简化到R的二元组R(U,F)
F:表示数据间的函数依赖
数据依赖
即各属性之间相互依赖、相互制约的联系 一张表中过多的数据依赖会导致 数据冗余太大 修改异常 插入异常 删除异常 ......等问题
函数依赖
多值依赖
连接依赖
将结构复杂的关系分解成结构简单的关系
函数依赖
体现了语义限制 函数依赖是完整性约束的特殊形式
定义
属性X,属性Y 若一个X只对应一个Y 则称X函数确定Y,Y函数依赖于X,记作X->Y
平凡函数依赖
X->Y,且Y属于X
非平凡函数依赖
X->Y,且Y不属于X
完全函数依赖
X,Y为R的属性集,且X->Y,若X的任意子集都不能唯一对应一个Y 则称Y对X完全函数依赖 当决定因素是单一属性时,只能完全函数依赖,不存在部分函数依赖
部分函数依赖
与完全函数依赖相反,有X的真子集满足X'->Y时,则称Y部分依赖于X
传递函数依赖
X->Y,X不函数依赖于Y,Y->Z 则记作,Z传递函数依赖于X 若X<->Y,则Z是直接函数依赖
码的形式定义
规范化理论
研究如何把一个不好的关系模式转换为好的关系模式的理论 基本思想: 消除关系模式中的数据冗余 消除数据依赖中的不合适部分 解决数据插入、删除时发生的异常现象
规范化
将一个低一级范式的关系模式, 通过投影运算可以转换为若干个高一级范式的关系模式的集合(按列拆关系) 这种分解具有无损连接性 这一过程称为规范化
范式
数据库的规范化过程中为不同程度的规范化要求设立的不同标准 等级高一定满足等级低的所有要求
概念复习
主属性
候选码中的属性
非主属性
不包含在任何候选码中的属性
1NF
关系R属于第一范式,当且仅当R中的每一个属性A的值域只包含原子项 关系数据库中的关系都满足1NF
2NF
若关系模式在满足1NF的基础上,每个非主属性都完全函数依赖于R的每个候选码(包括主码) 则关系模式R属于第二范式 对于单属性码,或全码,属于第二范式
3NF
在2NF的基础上。每个非主属性都不传递函数依赖于R的候选码 则关系R属于第三范式
BCNF
Boyce-Codd范式: 所有决定因素都包含候选码 消除所有属性对码的部分和传递函数依赖 即在3NF的基础上消除主属性对码的部分和传递函数依赖 所有非主属性都完全函数依赖于每个候选码 所有主属性都完全函数依赖于每个不包含它的候选码 没有任何属性完全函数依赖于非码的任何一组属性
4NF
在BCNF基础上消除多值依赖
5NF
在4NF基础上消除连接依赖
关系模式规范化的目的和原则
目的: 使结构合理 消除存储异常 使数据冗余尽量小 便于插入、删除和更新 基本原则: 遵从概念单一化“一事一地”的原则
数据库设计
重点
数据库设计概述
数据库设计:指对于一个给定的应用环境,构造(设计)优化的数据库 逻辑模式和物理结构,并据此建立数据库及其应用系统 满足信息管理要求和数据操作要求
数据库设计的特点
将数据库结构设计和数据处理设计密切结合
数据库设计方法
新奥尔良法
基于E-R模型的设计方法
3NF的设计方法
数据库设计的基本步骤
准备工作:找人
系统分析人员、数据库设计人员
用户和数据库管理员
应用开发人员(程序员和操作员)
数据库设计的过程(六个阶段)
数据库设计过程中的各级模式
需求分析阶段
概念设计阶段
逻辑设计阶段
物理设计阶段
需求分析
需求分析的任务
信息要求
处理要求
安全性和完整性的要求
需求分析的方法
数据字典
数据项
数据结构
数据流
数据存储
处理过程
概念结构分析
概念模型
将事物从现实世界抽象到信息世界 能真实、充分地反映现实世界 易于理解 易于更改 易于向关系、网状、层次等各种 数据模型转换
E-R模型
实体型
矩形
属性
椭圆形
关系
菱形
概念结构设计
能作为属性的尽量作为属性对待 属性不再具有需要描述的性质 属性不能与其他实体具有联系
合并分E-R图
生成初步E-R图
逻辑结构分析
把基本E-R图转换为与选用的DBMS产品支持的数据模型相符合的逻辑结构
E-R图向关系模型的转换
一个实体型转换为一个关系模式
实体间的联系
数据模型的优化
以规范化理论为指导
设计用户子模式
使用更符合用户习惯的别名
针对不同级别的用户定义不同的View
安全性
简化用户对系统的使用
数据库的物理设计
物理结构
数据库在物理设备上的存储结构与存取方式,依赖于选定的DBMS
数据库物理设计的内容和方法
关系模式存取方法选择
B+树索引
Hash索引
聚簇存取
确定数据库的存储结构
考虑因素
存取时间
存储空间
利用率
维护代价
存放位置
根据应用情况分类数据,分开存放
评价物理模型
存储空间
存取时间
维护代价
数据库实施
建立数据库
组织数据入库
人工方法
计算机辅助数据入库
编制与调试应用程序
功能测试
性能测试
并行进行
数据库运行和维护
数据库的转储和恢复
数据库的安全性、完整性控制
数据库性能的监督、分析和改进
数据库的重组织与重构造
数据库设计的基本步骤
数据库编程
嵌入式SQL
将SQL语句嵌入到其他编程语言中
过程化SQL
是对标准SQL的扩展,其基本结构是块 可以定义过程和函数
变量
局部变量
用在SQL语句块中(如:BEGIN...END) 作用域仅限于该语句块
set xxx = 123;
用户变量
作用域为当前连接 在客户端链接到数据库实例整个过程中用户变量都是有效的 可以不用定义直接使用
set @age=19;
可用=/:=赋值
select @age:=22;
使用select时必须用:=赋值
会话变量
只存在在连接的过程中 每次建立一个新连接,由MySQL初始化 将全局变量的值复制一份作为会话变量 连接断开,会话变量丢失
@@session/local.
用户无法定义
全局变量
数据库内置变量,每次服务器启动都会被初始化为默认值 可以在任何地方被任何程序调用 用户不能随意创建全局变量 (会话变量知识全局变量的副本,修改会话变量只会影响当前对话)
@@global.
用户无法定义
系统变量
常量
字符串常量
整型常量
实型常量
DECIMAL和NUMERIC
日期时间常量
流程控制
注释
BEGIN...END
相当于C++的 { } 将多条SQL语句封装起来
IF...ELSE
CASE
用在select中以end结束 单独case语句以end case;结束
WHILE/ITERATE/LEAVE
leave相当于break iterate相当于continue
RETURN
存储过程和函数
存储过程
优点
加快程序的执行速度
较强的逻辑控制能力
减少网络的数据流量
提高数据的安全性与完整性
支持程序的模块化设计,便于维护
缺点
定制化于特定的数据库上,数据库迁移需要重写存储过程
存储过程的性能调校与撰写受限于数据库系统
创建和调用
语法
drop/alter procedure|function Name;
参数
无参
in
传入值
out
传出值
inout
即传入又传出 尽量少用
函数
存储过程和函数的区别
功能
返回值
使用
设计与应用开发
数据库恢复技术
重点
事务的基本概念
事务
用户定义的一个数据库操作序列 要么全做要么全不做,是一个不可分割的工作单位 一个程序通常包含多个事务 事务是恢复和并发控制的基本单位
定义事务
BEGIN TRANSACTION; SQL语句1; SQL语句2; ...... 1.COMMIT;(正常结束) 提交事务的所有操作(读+更新) 事务中所有对数据库的更新写回到磁盘上的物理数据库中 2.ROLLBACK;(异常终止) 将事务中对数据库的所有已经完成的操作全部撤销 事务回滚到开始状态
事务的特性(ACID)
需要满足ACID特性的操作序列应该被定义为事务 保证事务ACID特性是事务处理的任务
原子性(Atomicity)
事务是数据库的逻辑工作单位 事务中的操作要么都做,要么都不做
一致性(Consistency)
事务执行的结果必须是 使数据库从一个一致性状态变为另一个一致性状态 一致性状态 数据库中只包含成功事务提交的结果 不一致状态 1.数据库运行中发生故障,有些事务尚未完成就被迫中断 2.这些未完成事务对数据库所做的修改有一部分已写入数据库, 这时,数据库就处于一种不正确的状态
隔离性(Isolation)
一个事务的执行不能被其他事务干扰 一个事务内部的操作及使用的数据对其他并发事务是隔离的 并发执行的各个事务之间不能互相干扰
持续性(Durability)
也称永久性(Permanence) 一个事务一旦提交,它对数据库中数据的改变就应该是永久的 接下来的其他操作或故障不应该对其执行结果有任何影响
破坏事务ACID特性的因素
多事务并行运行时,不同事物交叉执行可能破坏隔离性
事务运行过程中被强迫停止可能影响其他事务
数据库恢复概述
故障不可避免
故障的影响
影响数据正确性
破坏数据库,全部或部分丢失数据
故障的种类
事务内部的故障
事务内部的故障多是非预期的 事务故障意味着事务没有达到预期重点,数据库可能处于不正确状态 事务撤销:强行ROLLBACK,强制撤销
恢复策略:UNDO
系统故障
恢复策略:UNDO+REDO
UNDO撤销、REDO重做 UNDO日志记录某数据被修改前的值,可以用来在事务失败时进行rollback; REDO日志记录某数据块被修改后的值,可以用来恢复未写入data file的已成功事务更新的数据
介质故障
恢复策略:用备份恢复到某一致性状态+REDO
计算机病毒
恢复的实现技术
恢复的基本原理: 利用存储在系统别处的冗余数据来重建数据库
数据转储(backup/data dump)
DBA定期将整个数据库复制到多个存储设备上保存起来的过程 是数据库恢复中采用的基本手段 转储的数据文本称为后备副本(backup) 只能恢复到转储时的状态
按转储状态分
静态转储
转储时数据库停摆
动态转储
转储日志文件
按转储方式分
海量转储
每次转储整个数据库 恢复方便
增量转储
只转储上次转储后更新过的数据 数据库大时,效率高
登记日志文件(logging)
日志文件
用来记录事务对数据库的更新操作的文件
以记录为单位的日志文件
以数据块为单位的日志文件
日志文件的作用
进行事务故障恢复
进行系统故障恢复
协助后备副本进行介质故障恢复
登记日志文件
登记次序严格按并发事务执行的时间次序
必须先写日志文件,后写数据库
恢复策略
事务故障及其恢复
只需要日志,不需要DBA介入
取消故障事务所做的一切改变 UNDO
恢复步骤
反向扫描日志文件,查找更新操作
对更新操作执行反操作
系统故障及其恢复
由系统在重启后自动完成,不需要用户干预
UNDO所有未完成事务
未完成的事务在日志文件中只有BEGIN标记没有COMMIT
REDO所有已提交但未写入磁盘数据库的事务
已提交事务既有BEGIN又有COMMIT
介质故障及其恢复
需要DBA介入
手动装入故障前的最新副本,重做已完成事务
动态转储的数据库副本还需要装入转储时刻的日志文件副本
具有检查点的恢复技术
增加检查点记录
增加重新开始(启动)文件
恢复子系统在登录日志文件期间动态地维护日志的功能
动态维护定期/不定期都可以
数据库镜像
根据DMA要求,DBMS自动把整个数据库或其中的关键数据复制到另一个磁盘上
出现故障时用于恢复
没有出现故障时用于并发
并发控制
本章讨论的数据库系统并发控制技术以单处理机系统为基础
并发控制概述
事务是并发控制的基本单位 并发控制机制的任务 1.对并发操作进行正确调度 2.保证事务的隔离性 3.保证数据库的一致性 DBMS必须提供并发控制机制
丢失修改
T1,T2对同一数据修改,T2的提交覆盖了T1的提交
读“脏”数据
事务读到了因种种原因产生的不正确的数据
不可重复读
T1读了数据R后,R被T2修改,T1再读R,与第一次结果不同
数据改变
数据消失
数据增多
破坏了事务的隔离性
并发控制类型
悲观并发控制
乐观并发控制
封锁
排它锁(X锁)
又称写锁,禁止并发操作 事务T对A加X锁,则只有T能修改锁,别的事务只能读A,不能加任何锁
共享锁(S锁)
又称读锁,允许多个用户对同一数据读,但不能修改 事务T对数据A加共享锁,则T只能读A,其他事务只能加S锁 不能加X锁,除非没有A上没有任何锁
封锁协议
一级封锁协议
二级封锁协议
三级封锁协议
活锁和死锁
活锁
处于永久等待排它锁的状态
避免措施:队列
先来先服务
死锁
T1和T2将要封锁的数据对方都还没有释放 所以永远等待
预防死锁
死锁发生的必要条件: 互斥条件(封锁采用排它锁) 不可抢占条件 部分分配条件 循环等待条件
一次加锁法
对事务必须要使用的对象全部加锁 有一个不成功都要释放其他重新加锁 缺点: 扩大了封锁范围,降低了并发度 难于事先精确确定封锁对象
顺序封锁法
预先对所有可加锁的对象规定加锁顺序 每个事务都只能按此顺序加锁,不能跳过 缺点: 维护成本高 难于实现
死锁的诊断与解除
允许死锁发生,一旦检测到死锁,就要设法解除
超时法
超过规定时间就判为死锁 可能产生误判或没有及时发现死锁
等待图法
解除死锁的方式:撤销事务
牺牲品事务通常为 最迟交付的事务 获得锁最少的事务 恢复代价最少的事务
并发调度的可串行性
两段锁协议
封锁的粒度
其他并发控制机制