《数据库系统概论》笔记整理(一)
程序员文章站
2022-06-01 22:21:17
...
文章目录
一)数据库
1. 定义
数据库是按照数据结构来组织、存储和管理数据的仓库
2. 分类
-
关系型数据库:Oracle、DB2、MySQL等
-
非关系型数据库:MongoDB、Memecached、Redis等
区别:
关系:安全,浪费空间:磁盘存储
非关系:效率高,不是特别安全(内存存储容易丢失)
3. 数据模型
数据模型是数据特征的抽象
- 概念模型:按用户观点对数据和信息建模
- 逻辑模型和物理模型
- 逻辑模型:层次模型,网状模型,关系模型等
- 物理模型:数据在系统内部(如磁盘)的表现方式和存取方法
数据模型组成要素:数据结构,数据操作,数据完整性约束
概念模型:实体,属性,码,实体型,实体集,联系
关系模型:关系,元组,属性,码,域,分量,关系模式
数据操作:增删改查
完整性约束:实体完整性,参照完整性,用户定义完整性
(关系 == 二尾表)
4. 三级结构和二级映像
-
外模式:数据库用户能看见和使用的局部数据的逻辑结构和特征的描述
外模式:模式的子模式
-
模式:数据库全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图
-
内模式:数据物理结构和存储方式的描述
二)关系型数据库
1. 定义
关系型数据库,是一种建立在关系模型上的数据库
关系模型:建立在关系(一张二维表)上的模型
2. 组成要素
数据结构
数据操作
完整性约束
- 实体完整性:主键(关系的主属性,不能取空值)
- 参照完整性:外码(空值,或所引用关系元素的主码值)
- 用户定义完整性
3. SQL
关系数据库的三级结构
外模式:局部数据的逻辑结构和视图
模式:全局数据
内模式:物理结构和存储方式
外模式==视图+部分基本表
模式==若干基本表
内模式==存储文件
一或多个表,对应一个存储文件
一个表有若干索引
数据定义语言
- 对象:模式,表,视图,索引
create
drop
alter
数据更新语言
insert
update
delete
数据查询语言
select
数据查询:
指定列:单表查询,多表查询
去重:distinct
条件:where(比较,范围,集合,字符匹配,空值,多重条件)
排序:order by
分组:group by having
聚集函数:count、sum、avg、max、min
连接查询:等值连接,非等值连接
自身连接
外连接:左外,右外,全
嵌套查询:any,all谓词/聚集函数和in等
exists
集合查询:union,intersect,except
数据控制语言
grant
revoke
4. 数据类型
显示宽度:用于显示,长度不够前缀填充0
- 数值:
- 整数:1,2,3,4,8字节
- 小数:浮点,定点
- 字符串:char,varchar,text,blob,enum,set
- 日期时间:日期时间,日期,时间,时间戳,年份
5. 完整性详解
实体完整性
主键定义
参照完整性
外键定义
用户定义完整性
-
属性约束:空与非空,唯一,check
name varchar(12) not null card_id char(18) unique not null sex char(2) check (sex in('男', '女')) score int check (score>=0 and score<=100)
-
元组:check
# 男性不能以Ms开头 check (sex='女' or name not like 'Ms%')
-
完整性约束命名语句:
constraint <完整性约束条件名> <完整性约束条件>
条件:not null,unique,primary key,foreign key,check等
6. 触发器
-
定义:事件,条件,动作
事件:增删改,事务的结束等 条件真,触发动作 create trigger <触发器名> before|after insert|delete|update [of <属性>] on <表> referencing #引用变量 oldrow as <别名>, newrow as <别名> for each row [when <条件>] <动作> 说明:若没有`for each row`,可引用变量为:oldtable,newtable
-
**
-
删除
7. 关系数据库理论
P第6章 《数据库系统概论》
基本名词:平凡函数依赖,非平凡函数依赖,决定因素,完全函数依赖,部分函数依赖,传递函数依赖
(完全:X→Y,但X的真子集不能决定Y
(部分:X→Y,但X的真子集→Y
码,候选码,超码,主属性,非主属性|非码属性
外码
数据依赖
-
函数依赖:例如学号决定学生信息(姓名,专业…),即y=f(x),x→y
常见问题:数据冗余,更新异常,插入异常,删除异常
-
多值依赖
范式
1NF:关系的每一个变量必须是不可分的数据项
表的列,不可分
2NF:每一个非主属性完全函数依赖于任何一个候选码
3NF:每一个非主属性不传递依赖、不部分依赖于码
BCNF:??
排除传递和部分函数依赖
## 多值依赖:??
4NF:??
8. 数据库编程
-
过程化SQL:块
-
存储过程和函数
-
过程化SQL的游标
三)并发控制
1. 事务
事务(一批操作),要么全成功,要么全失败。
特性
ACID
并发事务问题
- 脏读
- 不可重复读
- 幻读
事务隔离级别
- 读未提交
- 读已提交
- 可重复读
- 串行化
并发事务解决方案
- 锁
- MVCC
事务故障
- 事务故障
- 系统故障:
- 介质故障
- 计算机病毒
数据恢复
-
数据冗余
数据转储:数据库复制到存储介质 登记日志文件
-
数据恢复
2. 并发控制
并发操作带来的数据不一致性包括:丢失修改
,不可重复读
,读脏数据
- 原因:破坏事务隔离性
- 解决:*,时间戳,乐观控制,多版本并发控制MVCC等
*
X(排他|独享)锁和S(共享)锁
一级*协议:事务修改数据前,加X锁,事务结束后才解锁
解决:丢失修改。不解决:不可重复读,读脏数据
二级*协议:一级*协议+事务读数据前,加S锁,读完后解锁
解决:丢失修改,读脏数据。不解决:不可重复读
三级*协议:一级*协议+事务读数据前,加S锁,事务结束后才解锁
解决:丢失修改,读脏数据,不可重复读
其他问题:活锁,死锁
活锁:某个事务一直处于等待
解决:先来先服务
死锁:多个事务一直不能结束
解决:预防;诊断——处理
并发调度的可串行性
可串行化调度:多个事务的并发执行结果 == 按某一次序串行执行这些事务的结果
可串行性:并发调度,当且仅当它是串行化,认为是正确调度
两段锁协议:保证并发调度的正确性,从而保证多个事务执行结果的正确
所有事务必须分两个阶段对数据项加锁和解锁
1. 在对任何数据进行读写之前,首先要申请并获得该数据的*
2. 在释放一个*之后,事务不可再申请和获取任何其他*
*的粒度
*对象的大小,*粒度
- 逻辑单元:属性值,属性值集合,元组,关系,索引项,索引,数据库
- 物理单元:页,物理记录等
多粒度*
显示*:应事务要求直接加到数据对象上的锁
隐式*:上级节点加锁
加锁前,检查数据对象的显示*,上级节点——隐式*,下级节点显示*
效率过低!!
引入意向锁:避免检查下级节点的显示*
IS:父IS,子S
IX:父IX,子X
SIX:加S锁,再加IX锁
读整个表,加S锁
更新元组,子X,则父IX,即加IX锁
3. 多版本并发控制
理解不够,暂略
参考
《数据库系统概论 第5版》
上一篇: JavaWeb基础系列(五)Jsp
下一篇: JavaWeb之JSP学习详解