四个基本定义
1.数据:数据库中存储的基本对象,描述事物的符号记录
2.数据库(DB): 是长期存储 在计算机内、有组织的、可共享 的大量数据的集合
基本特征:数据按一定的数据模型组织、描述和存储、可为各种用户共享、冗余度较小、数据独立性较高、易扩展
**3.数据库管理系统(DBMS):**位于用户与操作系统之间的一层数据管理软件
数据定义语言DDL、数据操纵语言DML、数据控制语言DCL
**4.数据库系统(DBS):**由数据库、数据库管理系统、应用程序、数据库管理员构成
数据库系统的特点
数据结构化
数据的共享性高,冗余度低且易扩充
数据独立性高( 数据独立性由数据库管理系统的二级映像功能 保证**)**
物理独立性:用户的应用程序与数据库中的物理存储是相互独立的。当数据的物理存储改变了,应用程序不用改变
逻辑独立性:指用户的应用程序与数据库的逻辑结构是独立的。当数据的逻辑存储改变了,应用程序不用改变
**数据由数据库管理系统统一管理和控制:**数据安全性保护、数据完整性、并发、数据库恢复
数据模型:对现实世界数据特征的抽象
- 概念模型(信息-》图):E-R图
- 逻辑模型(图-》二维表)
- 数据模型(二维表-》0/1)
实体、属性、码(唯一标识实体的属性)
数据模型的组成要素 :数据结构、数据操作、数据的完整性约数条件
常用的数据模型 :层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型
层次模型
优点:数据结构比较清晰、查询效率高、有良好的完整性支持
缺点:节点之间多对多联系表示不自然、插入删除限制多、查询节点必须通过双亲结点、层次命令趋于程序化
网状模型
不适合大量数据的存储
关系模型
数据的逻辑结构是一张二维表
- 关系:二维表
- 元组、域:一行
- 属性:一列
- 码:表中可以唯一确定一行的属性
要求:不允许表中有表
数据库系统的三级模式结构和二级映像
三级模式结构:模式、外模式、内模式
二级映像:保证了数据的安全性、独立性
外模式/模式映像:保证了数据逻辑独立性
内模式/模式映像:保证了数据物理独立性
简述关系模型的数据结构,以及关系模型的优缺点
关系模型的数据结构就是关系
关系模型的特点(优缺点)
优点:关系模型是严格建立在数学基础上的;关系模型概念单一;关系模型的存取路径对用
户透明,从而具有更高的数据独立性,更好的安全保密性,
缺点:由于存取路径对用户透明,查询效率不如非关系模型
关系数据库
- **域:**一组具有相同数据类型的值的集合
- 笛卡尔积:所有域的所有取值的一个组合,不能重复
- 关系-》二维表,表的每行对应一个元组,表的每列对应一个域
- 候选码:(非空、无重复)关系中某一组属性的值能唯一地标识一个元组,则称为属性组为候选码
- 主属性:候选码的属性叫做主属性
三类关系 :基本表、查询表、视图表(虚表,由基本表和其他视图的表导出的数据)
关系模式
关系模式是对关系的描述

关系模式与关系:关系模式是描述,静态的稳定的;关系是关系模式在某一时刻的状态或内容,是动态的、随时间不断变化的
关系数据库:以二维表为结构的数据库
关系操作
基本关系操作:
- 查询操作:选择、投影、连接、除、并、差、交、笛卡尔积(标红的为基本操作)
- 数据更新:插入、删除、修改
关系的完整性
- **实体完整性:**主属性不能取空置
- 参照完整性
- 用户定义完整性(根据用户需求定义)
关系代数
抽象的查询语言,用对关系的运算来表达查询(运算对象和运算结果都是关系)
选择、投影、连接、除
连接:
- 内连接: 只连接匹配的行
- 左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
- 右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
- 全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
关系数据库标准语言SQL
功能:查询+数据库模式的创建、数据库的插入与修改、数据库的安全性定义与控制
特征:
- SQL集DDL、DML、DCL功能于一体,可独立完成数据库生命周期的全部活动
- 高度非过程化:只提出做什么,而不说明怎么做
- 面向集合的操作方式
- SQL既可以是独立的语言,又是嵌入式语言

存储过程
存储过程就像我们编程语言中的函数一样,封装了我们的代码
逻辑结构组成了关系数据库的内模式,物理结构对用户是隐蔽的
存储过程的优点
- 能够将代码封装起来
- 保存在数据库之中
- 让编程语言进行调用
- 存储过程是一个预编译的代码块,执行效率比较高
- 一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率
存储过程的缺点:
- 每个数据库的存储过程语法几乎都不一样,十分难以维护(不通用)
- 业务逻辑放在数据库上,难以迭代
视图
**def.**是从一个或多个基本表(也可能包括其他视图)中检索出的虚拟表,它本身不存储数据。视图可以看作是基于基本表的查询结果集的临时表。视图可以进行查询操作,但不能直接进行数据修改。视图的定义存储在数据库中。
**优点:**简化用户的操作;用多种角度看数据;提供了逻辑独立性;保障了安全性;更清晰的表达查询
不可更新的视图:
(1)若视图是由两个以上基表导出的,此视图不允许更新
(2)若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATES作,但允许DELETE操作
(3)若视图的字段来自聚集函数,则此视图不允许更新
(4)若视图定义中含有GROUP BY子句,则此视图不允许更新
(5)若视图定义中含有DISTINCT短语,则此视图不允许更新
(6)若视图定义中有嵌套查询,并且内层查询的 FROM子句中涉及的表也是导出该视图的基本表,则此视图不允许更新
(7)一个不允许更新的视图上定义的视图也不允许更新
数据定义

删除:
- CASCADE:级联删除
- RESTRICT:限制删除
建立表时外码 的定义:
建立索引的目的:加快查询速度(顺序文件上的索引、B+树索引、散列(hash)索引、位图索引)

数据字典:关系数据库管理系统内部的一组表,它记录了数据库中所有定义信息
数据查询

单表查询
- 选择表中若干列
- 选择表中若干元组
distinct:去重、all:全部
查询满足条件的元组:用where

字符匹配 :

3.ORDER BY语句(可以按一个或多个属性列排序,AES升序,DESC降序)
4.聚集函数


5.GROUP BY


连接查询:同时涉及两个表以上的查询
外连接
嵌套查询
- 子查询不能使用order by
- 不相关子查询:子查询的条件不依赖于父查询
- 相关子查询:子查询的条件依赖于父查询
集合查询
并union交intersect差except
数据更新
数据库安全性
用户身份鉴别、多层存取控制、审计、视图、数据加密

(1)用户身份鉴别
(2)存取控制:定义用户权限+合法性检查
- 自主存取方法(GRANT和REVOKE语句实现)
- 强制存取控制MAC(等级更高):用敏感度标记
- 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
- 仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应客体


**(3)视图机制:**把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
**(4)审计功能(AUDIT):**启用一个专用的审计日志,将用户对数据库的所有操作记录在上面,监控员监控数据库中的各种行为,找出非法存取数据的人、时间或内容
(5)加密方法:存储加密&传输加密
数据库的完整性规则有哪几类?
实体完整性(主属性不为空)、参照完整性(主码与外码)、用户定义完整性
(1)实体完整性(主码):要求每个表中的主键必须具有唯一性和非空性。也就是说表中的每个 实体必须能构被唯一的标识,并且要求主键列不能包含空值。
(2) 参照完整性(外码):两个表之间建立外键关系时,要求引用表中的外键必须与被引用表中的主键值相匹配。也就是说,如果一个表中的外键引用了另一个表中的某个主键值,那么被引用的主键值必须存在于被引用表中。
(3)用户定义的完整性(创建表时定义约束条件):用户定义的完整性规则是根据具体业务需求而定义的规则。这些规则可通过触发器、自定义约束或存储过程等方式实现。例如,限制某个字段的取值范围、检查复杂的业务逻辑规则等。
完整性约束命名子句

断言:可以定义多个表或聚集操作的比较复杂的完整性约束,任何断言不为真的都会被拒绝执行
简述数据库完整保护的主要任务和措施
主要任务是保障数据的正确性,有效性,提高数据对用户的可用性
其措施如下:
适时检查完整约束条件,保证语句完整。
控制并发系统操作,使其不破坏完整性。
在系统出现故障候,即时恢复系统。
触发器
(1)触发器:触发器是与表有关的数据库对象,在满足预定义条件时会被触发,从而执行触发器中定义的语句集合。
(2)触发条件:数据库变更、插入、删除、修改数据时
(3)触发器的作用:
- 强制数据完整性:当插入或者修改表中数据的时候,触发器可以检查数据的有效性并拒绝不合规定的操作。
- 数据验证和转换:对即将插入、更新、删除的数据进行验证和转换
- 日志记录和审计:可以用于记录数据操作的日志
- 自动化业务逻辑:执行复杂的业务逻辑
数据依赖关系
看数据库是否有问题:数据库冗余+增删改查异常
主属性 :候选码中的每个属性
1.函数依赖 (完全vs部分|传递依赖|平凡vs非平凡依赖):一个x对应一个y(y=f(x))


2.多值依赖:一个x对应多个y

求解候选码
- 只在右边出现,不属于候选码
- 只在左边出现,必属于候选码
- 左右均不出现,必属于候选码
- 求必属于属性集的闭包,闭包=U,则必为候选码
- 若仍未找到,左右两边出现的属性依次与必选属性组和,求属性闭包合集,若闭包=U,则为候选码
范式
def.符合某一种级别的关系模式的集合
**第一范式(1NF):**不能大表套小表(二维表中的数据不能再分解)
第二范式(2NF): 每一个非主属性完全依赖于任何一个候选码(非主属性对主属性没有部分函数依赖)
第三范式(3NF): 每一个非主属性对任何候选码没有传递依赖
BC范式(BCNF): 消除主属性对码的部分和传递依赖
**第四范式(4NF):**R属于BCNF并且没有非平凡且非函数依赖的多值依赖

数据依赖的公理系统


闭包的求解
闭包def.在关系模式<U,F>中为F所蕴含的函数依赖的全体叫做F的闭包
函数依赖集等价-》两个闭包相同
eg. U={A,B,C,D,E},F={AB->C,B->D,C->E,EC->B,AC->B}求解AB的闭包
=AB
=ABCD
=ABCDE
=
=ABCDE所以AB的闭包为ABCDE
求解最小依赖集/极小依赖集
(1)确保右部为单属性(拆)
(2)把每个拿掉看看有无冗余(删除后等价的去掉)也就是看去除之后(左部的闭包是否在里面仍然可以推出)
(3)看左部不为单属性确保完全函数依赖

数据库设计
需求分析->概念结构设计(画E-R图)->逻辑结构设计(转二维表+规范化)->物理结构设计(建立索引)

E-R图向关系模型转化(逻辑结构设计)
1.一个实体转换为一个关系模型(关系的码是实体的码)
2.联系转换为关系模型
(1)1-1联系
- 转换为一个独立的关系模式(属性=与其相连实体的码以及联系本身的属性;码=每个实体的码)
- 可以与任意一端对应的表合并(属性=对应关系的码和联系本身的属性;码不变)
(2)1-n联系
- 转换成独立的关系模式(属性=与该联系相连的各实体的码以及联系本身的属性;码=n端实体的码)
- 与n端对应的关系模式合并(属性=对应关系的码和联系本身的属性;码不变)
(3)m-n联系(必须转换为独立的关系模式)
- 属性=与其相连实体的码以及联系本身的属性;码=各实体码的组合
优化数据模型(逻辑结构设计)
确定数据依赖->对数据依赖进行极小化处理->规范化
数据库管理系统的存取方法--常用B+树索引
(1)B+树索引
(2)HASH索引

(3)聚簇索引

什么是游标
游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理
不用游标的SQL语句:说明性语句;数据定义语句;数据控制语句;查询结果为单记录的SQL语句;非CURRENT形式的增删改查语句
**必须使用游标的SQL语句:**查询结果为多条记录的SELECT语句;CURRENT形式的UPDATE语句;CURRENT形式的DELETE语句(只想修改/删除其中的某个记录)
什么是存储过程
由过程化SQL语句书写的过程,经编译和优化后存储在数据库服务器中,使用时只要调用优化即可
优点:(1)运行效率高(2)降低了客户机和服务器之间的通信量(3)方便实施企业规则
ODBC编程
原因:由于不同数据库管理系统的存在,在某个关系数据库管理系统下编写的应用程序不能在另一个关系数据库管理系统下运行;许多应用程序需要共享多个部门的数据资源,访问不同的·关系数据库资源
定义:提供了一组访问数据库的应用程序编程接口
简述事务的该店及事务的四个特征
事务:一个不可分割的工作单位,这些操作要么全做要么不做
(1)原子性:要么全做,要么全不做
(2)一致性:与原子性密切相关,要么全做要么全不做,否则会造成数据不一致
(3)隔离性:一个事务的执行不能够被另一个事务干扰
(4)持久性:数据库的改变是永久的
简述故障的种类
(1)事务内部的故障:采用REDO或者UNDO撤销技术
(2)系统故障:DBMS系统突然停转要重启,不会破坏数据库
(3)介质故障:硬件损坏(破坏数据库)
(4)计算机病毒
什么是数据库恢复?恢复原则是什么?恢复如何实现?
数据库恢复:当数据库系统发生故障时,通过一些技术,使数据库从不正确的状态恢复到最近一个正确的状态
恢复的基本原则:冗余,即数据的重复存储
恢复常用的方法:(1)数据转储,对失败的事务重新执行;(2)日志文件:记录事务对数据的更新操作的文件
简述恢复策略中的各个故障时如何恢复?
(1)事务故障:事务异常终止,就撤销之前的操作
(2)系统故障:还没执行的UNDO,丢失的REDO
(3)介质故障:重装数据库,重做已经完成的事务
并发操作可能会产生哪些问题?用什么方法能避免各种不一致的情况?
(1)丢失数据:修改的数据没生效
(2)读脏数据:一个未提交的事务读取到另一个未提交的事务
用并发控制(封锁方法)避免不一致的情况
什么是封锁?基本的封锁类型有哪些?
封锁:事务在对某个数据对象操作之前,先向系统发出请求,对其加锁,在事务释放他的锁之前,其他事务不能更新或读取此数据对象
(1)排他锁(写锁):X锁,可以读取和修改数据
(2)共享锁(读锁):S锁,只可以读取不可修改数据
简述封锁协议
(1)一级封锁协议:修改时必须加X锁,直到结束(解决丢失修改)
(2)二级封锁协议:读的时候加S锁,用完就释放(解决读脏数据)
(3)三级封锁协议:读的时候加S锁,直到结束(解决不可重复读)
什么是死锁?预防死锁的方法?
T1等待T2而T2等待T1,T1和T2两个事务永远不能结束,形成死锁
预防死锁的方法:
(1)一次封锁法(每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行)
(2)顺序封锁法(预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁)
什么是活锁?简述活锁产生的原因和解决方案?
活锁的状态是变化的,只是无法达到目的。
产生原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某封锁,从而导致活锁。
避免活锁的简单方法:采用先来先服务的策略。
死活与活锁的区别?
(1)处于活锁的实体是在不断的改变状态;而处于死锁的实体表现为等待
(2)活锁有可能自行解开,死锁则不能
