1、数据
数据:描述事物的符号记录
特点:数据和关于数据的解释不可分。
2、数据库
长期存储在计算机内、有组织、可共享的大量的数据的集合。
数据库中的数据按照一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
特点:永久存储、有组织、可共享。
3、数据库系统(DBS)(DateBase System)
指由数据库、数据库管理系统、应用系统、数据库管理员(DBA)
组成的存储、管理、处理和维护数据的系统
4、数据库管理系统(Database Management System)
数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,
用于科学地组织、存储和管理数据、高效地获取和维护数据。
主要功能:
数据定义功能(DDL);数据组织、存储和管理;
数据操纵功能(DML);数据库的事务管理和运行管理;
数据库的建立和维护功能;其他功能。
5、数据管理技术三个阶段
人工管理:数据不保存、不共享、不独立
文件系统:数据可以长期保存、共享性差、独立性差
数据库系统:数据结构化、共享性高、独立性高、由DBMS统一管理
5、数据的逻辑独立性和物理独立性
物理独立性:指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的
逻辑独立性:指用户的应用程序与数据库的逻辑结构是相互独立的
数据安全性和完整性
数据的安全性:保护数据以防止不合法使用造成的数据泄密和破坏
数据的完整性:数据的正确性、有效性、相容性
8、两类数据模型及其三要素
数据模型:对现实世界数据特征的抽象。是数据库系统的核心和基础
概念模型: (又叫信息模型)按用户的观点来对数据和信息建模,主要用于数据库设计
逻辑模型: 按照计算机系统的观点对数据建模,主要用于数据库管理系统的实现
物理模型:对数据最底层的抽象、面向计算机系统
三要素:
数据结构:描述数据库的组成对象以及对象之间的关系
数据操作:对数据库各种对象允许执行的操作的集合
数据的完整性约束条件:一组完整性规则
概念模型
用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具也是数据库设计人员与用户之间进行交流的语言。
信息世界中的概念
实体:客观存在且可相互区别的事物
属性:实体所具有的某一特性
码:唯一标识实体的属性集
实体型:用实体名及其属性名集合来抽象和刻画同类实体
实体集:同一类型实体的集合
联系:一对一,一对多,多对多。
常用的数据模型
层次模型:
有且只有一个节点没有双亲节点,即根节点
根节点以外的其他节点有且只有一个双亲节点
网状模型:
允许一个以上的节点没有双亲
一个节点可以有多于一个的双亲
关系模型:
关系:一个关系对应一张表
元组:一行
属性:一列
码:表中的属性组,可以唯一确定一个元组
域:属性的取值范围
E-R图
即实体-关系图,用于描述现实世界的事物及其相互关系。
表示实体型、属性和联系的方法,实体型用矩形,属性用椭圆,联系用菱形。
关系的完整性约束条件
实体完整性
参照完整性
用户自定义完整性。
数据库的三级系统结构
外模式
模式(逻辑模式、概念模式)
内模式
模式
模式(也称逻辑模式)
数据库中全体数据的逻辑结构和特征的描述。
所有用户的公共数据视图。
外模式
是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述
是数据库用户的数据视图
内模式
是数据物理结构和存储方式的描述
是数据在数据库内部的组织方式
数据库的二级映像
外模式/模式映像:逻辑独立性(模式改变,映像做相应的改变,使得外模式不变,从而应用程序不必修改)
模式/内模式映像:物理独立性(内模式改变,映像做相应的改变,使得模式不变,从而应用程序不必改变)
数据库管理员的职责
决定数据库中的信息内容和结构
决定数据库中的存储结构和存储策略
定义数据库的安全性要求和完整性约束条件
监控数据库的使用和运行
数据库的改进和重组
关系:表
域:一组具有相同数据类型的集合
候选码:某一属性组的值能唯一确定一个元组
主属性:候选码的诸属性
范式:
关系必须要满足一定的规范条件
基本关系操作
并
差
积
投影:列
选择:行
SQL
是结构化查询语言,非过程化的语言
关系的完整性
实体完整性: 主码唯一且非空
参照完整性: 一个关系中的外码,对应着另一个关系的主码
用户定义的完整性: 就是针对某一具体关系数据库的约束条件
模式定义
create schema 模式名 authorization 用户名
为用户名定义一个模式
没有指定模式名,则默认为模式名为用户名
模式删除
drop schema 模式名
cascade 级联(模式的数据全被删除)
restrict 限制 (模式有数据,则不会删除)
两者必须二选一
表创建
crate table 表名(
列名 数据类型 完整性约束条件
id int(10) primary key,
cno int(10) ,
name varchar(255) not null,
foreign key(cno) reference Course(cno)
)
修改表
alter table 表名
add column 新列名 数据类型 完整性约束条件
drop column 列名 cascade/restrict
alter column 列名 数据类型
删除表
drop table 表名 cascade/restrict
索引
目的:加快查询速度
采用B+树、HASH索引
有聚簇索引和非聚簇索引(唯一索引、非唯一索引)
create [unique / clustre ] index 索引名字 on 表名 (列名)
drop index 索引名
数据字典
是数据库中内部的系统表,记录所有的定义的信息
数据查询
select
[ *, distnct ,all]
from 表名
where 条件表达式
group by 列名 having 条件表达式
order by 列名 ASC|DESC
distinct消除重复行
聚集函数不能在where后面使用
只能在select 和 having 中
未分组,聚集函数作用整个查询结果
非组 , 聚集函数作用每个组
having和where字句的区别
where作用于基表和视图,having作用于组
where 不能用聚集函数
嵌套查询
放在 where 或 having 后
子查询中不能使用order by
有些嵌套查询能够用连接运算替代
使用聚集函数实现子查询 要比直接使用ANY,ALL效率更高
EXISTS 判断是否为真(非空为真)
写在 where 后,去判断 子查询
效率上比连接运算要快
IN、比较运算符、ANY、ALL能够被EXISTS 的子查询替换
但是有些EXISTS的子查询不能够被其他形式子查询替换
集合查询
并
UNINON :查询结果合并,自动除去重复元组
UNION ALL:查询结果合并
交
INTERSECT
差
EXCEPT
在第一个集合,但是不在第二个集合
派生表的查询
子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中
插入数据
insert into 表名 (属性名、属性名)VALUES (常量、常量)
修改数据
update 表名 set 列名 = 表达式 where 条件表达式
where子句:缺省即默认所有
删除数据
delect from 表名 where 条件表达式
空值
不存在
IS NULL 和 IS NOT NULL
NOT NULL能约束不能取空
UNIQUE能约束不能取空
码属性不能取空值
视图
视图是虚表,是从基本表中导出来的
只存放视图的定义、不存放视图所对应的数据
基表数据发生变化、视图查询到数据也会发生变化
create view 视图名 [列名、列名]
as
子查询
[with check option]
子查询不能有order by 和 distinct
查视图就是按视图的定义的基本表中将数据查询出来
with check option 表示对视图进行增删改操作时 要保证增删改的行 满足 子查询条件表达式
删除视图
drop view 视图名 [cascade]
只是从数据字典中删除视图的定义
如果视图还导出了其他视图、则使用cascade级联将该视图和导出的视图一起删除
删除基表,不会删除导出的视图,要手动删除视图
视图作用
简化用户的操作
对数据库提供一定的逻辑独立性
对重要数据提供安全保护
数据的安全性:
保护数据库防止恶意破坏和非法存取
对象:非法用户和非法数据
数据库的不安全因素
非授权用户对数据库的恶意存取和破坏
数据库中的数据被泄露
安全环境的脆弱性(硬件、操作系统)
手段
用户身份鉴别
用户权限
视图:把要保密的数据对无权限的用户隐藏起来
审计:将用户对数据库的所有操作自动记录下来放入审计日记中
数据加密
数据库完整性
指数据的正确性和相容性
正确性:数据是否符合现实世界语义
相容性:数据库同一对象在不同关系表中的数据是符合逻辑的
数据库的完整性:
防止数据库中存在不符合语义的数据,就是防止数据库中存在不正确的数据
对象:不合语义的数据
完整性的必要功能
提供定义数据完整性约束条件的机制
提供数据完整性的检查的方法
违约处理(拒绝执行)
实体完整性
主码唯一且非空
实体完整性规则自动进行检查(主码是否唯一,主码的各个属性是否为空)
参照完整性
在表1中定义外码,指明外码参照其他表的主码
用户定义的完整性
针对某一具体应用的数据必须满足的语义要求
列值非空(not null)
列值唯一(unique)
检查列值(check)
断言
任何对断言中所涉及关系的操作都会触发关系数据库管理系统对断言的检查
任何使断言不为真值的操作都会被拒绝执行
create assertion 断言名字 check 子句
drop assertion 断言名字
触发器
触发器是用户定义在关系表上的一类由事件驱动的特殊过程
create trigger 触发名
{before | after } 触发事件 on 表名
referencing new | old row as 表名
for each {row | statement}
drop trigger 触发器名 on 表名
13、函数依赖
简单地说,对于关系模式的两个属性子集X和Y,若X的任一取值能唯一确定Y的值,则称Y函数依赖于X,记作X→Y。
X→Y,但是Y∉X,则称X→Y是非平凡的函数依赖
X→Y,但是Y∈X,则称X→Y是平凡的函数依赖
完全函数依赖:X–>Y,对于X的任意一个真子集,都有该真子集无法推出Y,则称Y对X完全函数依赖
部分函数依赖:X→Y,但是Y不完全函数依赖于X,则称Y对X部分函数依赖
14、范式(第一、二、三)
数据库中关系是要满足一定的要求,满足不同程度的要求为不同的方式
1NF:要求数据库表的每一列都是不可分割的原子数据项
2NF:在1NF基础上,且每一个非主属性完全函数依赖于任何一个候选码(消除部分函数依赖),每一列都和主键相关
3NF:在2NF基础上,任何非主属性不依赖于其它非主属性(消除传递依赖),
确保数据库中的每一列都和主键直接相关,而不能间接相关
15、无损连接
是指分解后的关系通过自然连接可以恢复成原来的关系
即通过自然连接得到的关系与原来的关系相比,既不多出信息、又不丢失信息。
16、候选码、主码、外码和主属性
候选码:某一属性组的值能唯一确定一个元组
主码:如果候选码多余一个,则选择其中一个为主码
主属性:包含在任何一个候选码中的属性称为主属性
非主属性:不包含在任何一个候选码中的属性
全码: 整个属性组都是码
数据库设计
需求分析
概念结构设计:对用户需求进行归纳和抽象,形成概念模型
逻辑结构设计:将概念结构,转化为数据模型
物理结构设计:对逻辑数据模型 选取一个最合适应用环境的物理结构
数据库的实施:
数据库的运行和维护:
存储过程:类似于方法,是SQL语句的预编译集合 ,返回值可有可无
函数:是由SQL语句组成的子程序,可用于封装代码以便重新使用,必须要有返回值
查询处理步骤
查询分析:对查询语句进行分析、词法和语法分析
查询检查
查询优化
查询执行
事物:用户定义的一个 数据库 操作序列。这些操作,要么全做,要么全不做
事物的ACID
原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency):事物执行的结果必须是使数据库从一个一致性的状态变到另外一个一致性的状态,事务前后数据的完整性必须保持一致。
隔离性(Isolation):一个事物的执行,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的
事务的隔离级别
脏读:指一个事务读取了另外一个事务未提交的数据。
数据库故障种类
事物内部故障
系统故障、软故障(操作系统、断电)
介质故障、硬故障(硬盘故障)
计算机病毒
恢复的实现技术
数据转储:只能将数据库恢复到转储的状态
登记日志文件:记录事物对数据库的更新操作的文件
恢复策略
事物故障:事物异常终止,撤销之前的所有操作
系统故障:没执行完的事物UNDO撤销, 丢失的事物REDO重做
介质故障:重装最新的后备数据库副本;装入相关日志文件副本,重装已完成的事物
并发控制的任务
对并发操作进行正确的调度
保证事物的隔离性
保证数据库的一致性
并发操作带来的数据不一致包括
丢失修改、不可重复的、读脏数据
并发控制的主要技术:
封锁
时间戳
乐观控制法
封锁:
在事务对某个数据对象操作之前先向系统发出请求,对其加锁
封锁的类型
排他锁(写锁、X锁)
共享锁(读锁、S锁)
封锁协议
一级封锁协议:事务修改数据之前,必须要加X锁,直到事务结束才释放
作用:防止丢失修改
不能保证可重复读、不读脏数据
二级封锁协议:在一级封锁协议上+事务读取数据之前必须先加S锁,读完后释放S锁
作用:防止丢失修改,和读脏数据
不能保证可重复读
三级封锁协议:在一级封锁协议上+事务读取数据之前必须先加S锁,直到事务结束释放
作用:防止丢失修改,读脏数据、和不可重复读
活锁:
一直想获取锁,但是一直在等待,获取不到锁
策略:先来先服务
死锁
死锁的预防(效率低,不可行)
一次封锁法:一次将所有要使用的数据全部加锁
顺序封锁法:预先对数据对象规定封锁顺序,所有事物按照顺序进行封锁
死锁的诊断
超时法:事务的等待时间超过了规定的时间,就认为发生死锁
等待图法:反映所有事物的等待情况,图中出现回路闭环,则出现死锁
处理:选择一个处理死锁代价最小的事务,将其撤销,释放此事务所持有的所有的锁
并发调度的可串行性
并发执行事务的结果和某一次串行执行事务的结果,是一样的,则称为可串行化
冲突操作
指不同的事务对同一数据的读写操作和写写操作
两段锁协议:
目的:实现并发调度的可串行性,保证调度的正确性
含义:所有事务必须分开两个阶段对数据进行加锁和解锁
第一阶段:获得封锁,事务能获得任何数据项的任何类型的锁,但是不能释放任何锁
第二阶段:可以释放任何类型的锁,但是不能再申请任何的加锁
加锁一起加,放锁一起放
事务遵循两段锁协议是可串行化调度的充分条件,而不是必要条件
封锁的粒度
封锁粒度:封锁对象的大小
封锁对象:逻辑单元(属性、元组),物理单元(页)
考虑因素:封锁开销、并发度(大量元组:表,少量元组:元组)
多粒度锁
多粒度封锁协议:允许多粒度树中的每个节点被独立的加锁。
对一个节点加锁意味着这个节点的所有后裔节点也被加以同样类型的锁
显示封锁:直接加到数据对象上的锁
隐式封锁:没有被独立加锁,而是上层节点被加锁而使得该数据对象加上了锁
意向锁
如果对一个节点加意向锁,就说明该节点的下层节点正在被加锁
对任何一个节点加基本锁,必须对他的上层 加意向锁
锁的强度
指它对其它锁的排斥程度