欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《数据库系统概论》笔记整理(一)

程序员文章站 2022-06-01 22:21:17
...

一)数据库

1. 定义

数据库是按照数据结构来组织、存储和管理数据的仓库

2. 分类

  • 关系型数据库:Oracle、DB2、MySQL等

  • 非关系型数据库:MongoDB、Memecached、Redis等

区别:
	关系:安全,浪费空间:磁盘存储
	非关系:效率高,不是特别安全(内存存储容易丢失)

3. 数据模型

数据模型是数据特征的抽象

  • 概念模型:按用户观点对数据和信息建模
  • 逻辑模型和物理模型
    • 逻辑模型:层次模型,网状模型,关系模型等
    • 物理模型:数据在系统内部(如磁盘)的表现方式和存取方法
数据模型组成要素:数据结构,数据操作,数据完整性约束

概念模型:实体,属性,码,实体型,实体集,联系
关系模型:关系,元组,属性,码,域,分量,关系模式
	数据操作:增删改查
	完整性约束:实体完整性,参照完整性,用户定义完整性
	(关系 == 二尾表)

4. 三级结构和二级映像

  • 外模式:数据库用户能看见和使用的局部数据的逻辑结构和特征的描述

    外模式:模式的子模式
    
  • 模式:数据库全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图

  • 内模式:数据物理结构和存储方式的描述

二)关系型数据库

1. 定义

关系型数据库,是一种建立在关系模型上的数据库

关系模型:建立在关系(一张二维表)上的模型

2. 组成要素

数据结构

数据操作

完整性约束

  1. 实体完整性:主键(关系的主属性,不能取空值)
  2. 参照完整性:外码(空值,或所引用关系元素的主码值)
  3. 用户定义完整性

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

事务故障

  1. 事务故障
  2. 系统故障:
  3. 介质故障
  4. 计算机病毒

数据恢复

  1. 数据冗余

    数据转储:数据库复制到存储介质
    登记日志文件
    
  2. 数据恢复

2. 并发控制

并发操作带来的数据不一致性包括:丢失修改不可重复读读脏数据

  • 原因:破坏事务隔离性
  • 解决:*,时间戳,乐观控制,多版本并发控制MVCC等

*

X(排他|独享)锁和S(共享)锁

一级*协议:事务修改数据前,加X锁,事务结束后才解锁
	解决:丢失修改。不解决:不可重复读,读脏数据
二级*协议:一级*协议+事务读数据前,加S锁,读完后解锁
	解决:丢失修改,读脏数据。不解决:不可重复读
三级*协议:一级*协议+事务读数据前,加S锁,事务结束后才解锁
	解决:丢失修改,读脏数据,不可重复读
	
其他问题:活锁,死锁
	活锁:某个事务一直处于等待
		解决:先来先服务
	死锁:多个事务一直不能结束
		解决:预防;诊断——处理

并发调度的可串行性

可串行化调度:多个事务的并发执行结果 == 按某一次序串行执行这些事务的结果

可串行性:并发调度,当且仅当它是串行化,认为是正确调度

两段锁协议:保证并发调度的正确性,从而保证多个事务执行结果的正确
	所有事务必须分两个阶段对数据项加锁和解锁
	1. 在对任何数据进行读写之前,首先要申请并获得该数据的*
	2. 在释放一个*之后,事务不可再申请和获取任何其他*

*的粒度

*对象的大小,*粒度

  • 逻辑单元:属性值,属性值集合,元组,关系,索引项,索引,数据库
  • 物理单元:页,物理记录等
多粒度*
显示*:应事务要求直接加到数据对象上的锁
隐式*:上级节点加锁

加锁前,检查数据对象的显示*,上级节点——隐式*,下级节点显示*
	效率过低!!

引入意向锁:避免检查下级节点的显示*
	IS:父IS,子S
	IX:父IX,子X
	SIX:加S锁,再加IX锁
		读整个表,加S锁
		更新元组,子X,则父IX,即加IX锁

3. 多版本并发控制

理解不够,暂略

参考

《数据库系统概论 第5版》
相关标签: 关系型数据库