文章目录
- 第一章绪论
-
- 数据库的特点
- 数据库管理系统
- 数据库系统
- 开发数据库
- 数据独立性
- 数据模型
- E-R图
- 网状模型、层次模型、关系模型
- 关系模型
- 三级模式
- 二级映像
- 第二章关系数据库
-
- 描述关系R(U,D,DOM,F)
- 关系代数语言
- 连接
- 完整性
- 三、四、五、六都是sql句子(晚写)
-
- SQL语句
-
- 检索语句
- 增(insert)
- 删
- 改
- 创建视图语句
- 删除视图
- 索引
- 存储过程
- 触发器
- 给用户授权
- 第七章数据库设计
- 第八章关系数据理论
-
- 为什么引入范式(关系模式不好会出现以下问题)
- 依赖
- 候选码
- 范式
- 求最小函数的依赖集
- 模式分解
- 3.保持函数依赖NF分解
- 第九章关系查询处理优化(见课件)
-
- 根据关系模型设计E-R图
- 根据E-R图形关系模型
- 第十章 嵌入式sql
- 查询和优化第十一章关系
-
- 代数优化
- 第十二章数据恢复技术
-
- 事务的四个特点ACID
- 故障类型
- 恢复方式
- 恢复策略
- 恢复的技术和策略
- 登记日志文件(Logging)
- 日志文件的作用:
- 登记日志文件
- 恢复策略
-
- 事务故障恢复:(总结:撤销故障事务的所有操作从后到前撤销)
- 恢复系统故障:(总结:先对事务进行分类,未完成undo,已提交的redo)
- 介质故障恢复:
- 检查点
- 第十三章并发控制
-
- 并发问题
- 锁
- 封锁协议
- 活锁和死锁
- 死锁预防策略:
- 解锁策略:
- 意向锁
- 可串行性
- 冲突可串行化
- 冲突可以通过优先图来确定
- 两段锁协议
- 封锁粒度(ppt上是画星)
- 显式封锁,隐式封锁
- 回答问题(老师说也可能选择考试)
-
- 数据库概念简述
- 数据库系统由几个部分组成
- 数据库的基本特征
- 简述数据库系统的特点
- 关系的六个基本特征是什么? (列三行二一表)
- 关系和关系模式有什么区别?
- 连接 ?
- 简要介绍了数据库系统设计步骤和每一步的主要任务和文档
- 视图概念及其功能是什么?如何区分行列子集和非行列子集?
- 数据库系统经常采取的安全概念和安全措施
- 什么是SQL 注入入侵有哪些解决方案?
- 数据库的完整性概念
- 完整性类型
- 如何在插入和删除中体现完整性?
- 数据库的逻辑独立性和物理独立性是什么,数据库系统使用什么技术手段来确保它
- ==如下所示,有两个事务==:
- 事务概念,事务的四个性质是什么名称和内容。
- 例如什么是死锁,常用的解决方案是什么。
- 粒度
- 了解三级封锁协议、两级封锁协议、一次封锁法、串行调度和串行调度、冲突串行调度和判断。
- 简要介绍数据库系统故障的恢复过程。
- 解释SQL语句实施方案如下,分析索引优化。
- 云数据库和传统数据库系统有什么区别?
- 应用题
第一章绪论
数据库的特点
永久存储、组织、共享 冗余度小,数据独立性高,易于扩展
数据库管理系统
数据管理软件位于用户和操作系统之间
数据库系统
它是一个系统,包括数据库、数据库管理系统、应用程序、数据库管理员
开发数据库
人工:不分享,不独立,不保存 文件:可保存、共享差、冗余大、共享差 数据库管理系统:高共享、低冗余、高独立性
数据独立性
(废话) 物理独立性:应用程序和数据的物理存储独立性 逻辑独立性:应用程序和数据库逻辑结果的独立性 数据由数据库管理系统管理和控制
数据模型
概念模型(信息模型)、逻辑模型和物理模型。
概念模型:E-R图,按用户观点对信息和数据建模,就是对数据库设计。 基本概念:实体、属性、代码、实体类型(即类)、实体集(实体集合)、联系
逻辑模型和物理模型:网状模型、层次模型、关系模型 概念模型:层次模型、网状模型、关系模型 物理模型:数据底部的抽象。描述系统内数据的表示和访问方法;磁盘或磁带上的存储和访问方法
E-R图
关系是菱形,属性是椭圆,实体是矩形 没什么好说的,就画吧
网状模型、层次模型、关系模型
网模:树 层次模型:图 关系模型:存在数据库的表
关系模型
先(不要问为什么要区分这个东西):一个数据库下可以有多种模式。 在一种模式下,可以有0个或多个表 。简而言之,该模式定义了整个数据库,因此它包括表、视图、存储过程、索引、主键和外键。 模式可以类比成文件夹,其中的东西是文件。
关系:一张表 元组:行,即记录 属性:列,数据库字段 码:熟悉组 域:一组具有相同数据类型值的集合是属性中的几个 重量:一行(元组)中的属性
三级模式
外部模式(子模式,用户模式):数据库用户看到的局部数据对结构和特征的描述是数据视图,可以有多个。 模式(逻辑模式):逻辑模式,数据库中所有(所有用户)公共数据的逻辑结构和真实描述。 内部模式(存储模式):数据对结构和存储模式的描述是数据存储在数据库中的组织模式,用户看不到。 内模式-存储模式(按B树结构顺序存储,按B树结构存储hash方法存储)
二级映像
外模式/式映像:保证数据和程序的逻辑独立性。 模式/内模式映像:保证数据和程序的物理独立性。
第二章关系数据库
关系模型:对关系的描述 什么是关系:关系就是一张表,一张二维表
描述关系R(U,D,DOM,F)
R是关系名,U是所有的属性名,D是域,DOM是属性和域的映射,F是属性之间的依赖关系
关系代数语言
关系代数运算符: 集合运算符:并,交,差,笛卡尔积 X 专门的关系运算符:投影Π(保留列并取消重复行),选择σ,除÷(类比整除),连接 ⋈
(之前写过一个填空题)关系代数五种基本运算:并(U)、差(—)、投影、选择、笛卡尔积(X)。交、连接、除等为附加操作
连接
等值连接:
自然连接:把同等属性进行等值连接并去掉重复的同等属性列(同样的属性名只保存一个)。补充一个悬浮元组,就是在进行自然连接时候被舍弃的元组。在等值连接的情况下,当连接属性X与Y具有相同属性组时,把在连接结果中重复的属性列去掉
外连接:把悬浮元组也保留在结果,其他属性上写NULL 左外连接:保留左边的悬浮元组 右外连接:保留右边的悬浮元组
完整性
实体完整性:主键唯一且非空 参照完整性:外键要么为空要么对应另一表主键 用户自定义完整性:针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求
三,四,五,六都是sql语句(晚点写)
SQL语句
检索语句
增(insert)
insert into table (… ,…, …,);
删
DELETE FROM table_name WHERE some_column=some_value;
改
UPDATE table_name SET column1=value1,column2=value2,… WHERE some_column=some_value;
创建视图语句
CREATE VIEW view_name AS SELECT column1, column2… FROM table_name WHERE [condition];
删除视图
DROP VIEW view_name
索引
1.创建索引 CREATE INDEX index_name ON table_name (column_name) 2.唯一索引 CREATE unique INDEX index_name ON table_name (column_name)
存储过程
触发器
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt
给用户授权
第七章数据库设计
需求分析:熟悉需求,数据字典,用户需求规格说明书,系统边界 概念结构设计:E-R图 逻辑结构设计:E-R图转化成关系模型(数据库里的表,还没用sql执行),也可能是非关系模型 物理结构模型:设计关系,索引等物理,关系模型选择存取方法 数据库实现:执行sql 数据库运行和维护
截一段别人的 来源:https://blog.csdn.net/weixin_45591044/article/details/106350680
第八章关系数据理论
为什么引入范式(一个不好的关系模式会存在以下一些问题)
数据冗余,插入异常,删除异常,更新异常
依赖
平凡函数依赖:X能推出Y但Y不是X的子集 非平凡函数依赖:X能推出Y且Y是X的子集
完全函数依赖(F):X->Y,X的任意一个子集都推不出Y,则Y完全依赖于X 部分函数依赖(P):Y不完全依赖于X
候选码
怎么选出候选码 只出现在左边的一定是,只出现在右边的一定不是 左右都有的可能是 左右都没有的一定是
然后在一定是候选码的基础上加上可能是的里面的属性,如果能推出所有码那么这一组就是候选码 比如ABC,AB一定是候选码
超码:候选码基础上加任意属性,候选码是最小的超码 主码:候选码中任意挑一个 主属性:所有在候选码的属性 非主属性:主属性的不急 全码:所有属性都是著名
范式
越高的范式冗余越小
一级范式1NF:属性(字段值),已经最小了 二级范式2NF:确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(依赖)(主要针对联合主键而言),可以间接依赖。一个表只能表示一种事物的属性()。 三级范式3NF:2NF基础上 BCNF:属性对候选键的。相对于BCNF,3NF允许存在主属性对候选码的传递依赖和部分依赖 (去冗余,比如书号->书名,(书名,作者)->书号,这个就不满足,这有传递依赖)。
公理就记两个: X⊆Y,X->Y; X->Y,X->Z,得出X->YZ
求最小函数的依赖集
- 右边有多个式子的拆,A->BC变成A->B,A->C
- 去除当前式子,看能不能用其他式子推出当前式子,可以的化去掉当前式子,比如去掉A->G,但是A->F,F->G,所有A->G,所以A->G这个式子可以去掉
- 左式最小化:对每一个式子的左式尝试去掉属性看能不能推出被去掉的属性,可以就去掉。比如BCD->A,去掉D,但是因为C->D,所以F可以被去掉,BCD->A变成BC->A
模式分解
无损链接 保存函数依赖
求保持函数依赖的3NF分解
- 先求出最小函数依赖F
- 把不在F的单独作为一类
- 对应在F的,左边相同的整合成一类,A->B,A->C就是{ABC};如果不存在左边相同就单独一类BCD->G,{BCDG}
- 如果候选码在已分好的类里这步过,不在的化把任意一个候选码作为一类
第九章关系查询处理合优化(看一下课件)
根据关系模型设计E-R图
根据E-R图写关系模型
1-1:和1-n差不多,但是被写入的那个表任意 1-n:实体只有A,B。1是A表,n是B表 A表主键写入B,AB关系属性写入B n-m:关系单独拿出来作为一个实体,包含关系的属性,关系连接两表的主属性
第十章 嵌入式sql
就是把sql语句放到编程语言中,比如java
处理过程: 预编译转换成函数调用 诸语言编译 变成主语言所编译的类型
第十一章关系查询出来和查询优化
查询优化四阶段:查询分析,查询检查,查询优化,查询执行 查询优化包括物理优化和代数优化(又滑数)
代数优化
关系代数语法树,优化树 选择尽量先,然后头投影和选择一起 把投影和前后的双目运算连接
第十二章数据恢复技术
事务四个特性ACID
原子性,一致性,隔离性,持久性
故障类型
事务故障,系统故障,介质故障(就是硬件损坏了),计算机病毒
恢复方式
数据转储,日志文件
恢复策略
事务异常终止,就撤销之前所有操作 系统故障恢复,没执行的undo(撤销),丢失的redo(重做) 介质故障就重装数据库
恢复的实现技术及策略
转储即DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据称为后备副本。
转储又分为:静态转储必须等待正在运行的用户事务结束才能进行,;动态转储是指转储期间允许对数据库进行存取或修改,即。
也可分为:海量转储即每次转储全部数据库,增量转储即每次只转储上一次转储后更新的数据。
登记日志文件(Logging)
日志文件是用来记录事务对数据库的更新操作的文件。不同数据库系统采用的日志文件格式并不完全一样,主要有两种格式:
对的日志文件,日志文件中需要登记的内容包括: 各个事务的开始(BEGIN TRANSACTION)标记 各个事务的结束(COMMIT或ROLLBACK)标记 各个事务的所有更新操作 以上每一条内容记为一个日志记录(log record)
每个日志记录的内容主要包括:
对的日志文件,日志记录的内容包括。由于都放入日志文件中,操作的类型和操作对象等信息就不必放入日志记录中了。
日志文件的作用:
日志文件用于恢复和恢复,并
具体作用如下:
- 在方式中必须建立日志文件,起来才能有效地恢复数据库。
- 在静态转储方式中,也可以建立日志文件。
登记日志文件
为保证数据库是可恢复的,登记日志文件时必须遵循两条规则: (1) 登记的次序严格按并发事务执行的时间次序 (2)
如果先写了数据库修改,但是没有登记这个日志,那么中途运行故障就无法恢复这个修改了。
恢复策略
REDO:重做,日志文件,对每个REDO事务重新执行日志文件登记的操作 UDNO:撤销,扫描日志文件,对每个UNDO事务的操作执行,原本是删就加,原本是加就删 COMMIT:提交,将事务中所有对数据库的更新中,事务正常结束 ROLLBACK:回滚,事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成操作全部撤销,
事务故障的恢复:(总结:撤销故障事务的所有操作即从后往前撤销)
事务故障的修复就是要撤销事务。即清除该事务对数据库的所有修改,使得这个事务像根本没有启动过一样。 (1)反向扫描日志文件(即从最后向前扫描日志文件),查找该事务的更新操作 (2)对该事务的更新操作执行逆操作。(来得及或者未来得及写入数据库都没关系) (3)继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理 (4)如此继续,直到读到该事务的开始标记
系统故障的恢复:(总结:先把事务分类,未完成的undo,已提交的redo)
(1)正向扫描日志文件,找出在故障发生前已经提交的事务(这些事务既有BEGIN TRANSACTION记录,也有COMMIT记录),将其事务标记记入REDO队列;同时找出故障发生时尚未完成的事务(这些事务只有BEGIN TRANSACTION记录,无相应的COMMIT记录),将其事务标记记入UNDO队列 (2)对撤销队列中的各个事务执行UNDO操作 (3)对重做队列中的各个事务执行REDO操作
为什么要REDO?考虑。
介质故障的恢复:
- 静态转储
- 先装入后备副本
- 装入转储结束时刻的日志文件副本,重做已完成的事务
- 首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值"写入数据库。
- 动态转储
- 先装入后备副本
- 同时装入转储时(动态是边转储边执行)的日志文件,利用系统故障的恢复方法(REDO+UNDO)。
- 装入转储结束时刻的日志文件副本,重做已完成的事务
- 正向先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。
- 对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值"写入数据库。
在故障发生时还未完成的事务需要撤销,在检查点和故障点之间完成的事务需要重做,因为它们对数据库所做的修改在故障发生时可能还在缓冲区中 左边不用管,中间重做,右边撤销。
检查点
检查点技术是用在系统故障的恢复(与介质故障无关),目的是数据库运行突然中断,缓存中可能存在没有写数据库的数据丢失了,数据库的状态不可知,因此只有在数据库恢复时读取日志全部重做和撤消所有的事务,时间太长,设立检查点,定时地写盘,恢复时只需要从检查点开始。 但当你重装后备复本后,系统的问题,只是把日志中记录的已经提交的事务重做一遍就好了,如果是动态备份,则需要撤消未完成的事务(针对转储过程中的哪些未完成)。这一点上是和系统故障的恢复一样。与检查点无关了,不用管检查点。
第十三章并发控制
并发带来的问题
丢失修改:修改没生效,可能是多个事物读入同一数据并修改(被覆盖了) 读脏数据:读到的数据不是现在数据库存的,后一事务读到的数据与数据库中的数据不一致 不可重复读:希望与第一次读取的是相同的值但是却不是,因为修改或删除数据 幻读:因为新增数据
锁
排他锁,写锁:X 共享锁,读锁:S
排它锁(写锁,X锁):若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁前不能再读取和修改A
共享锁(读锁,S锁):若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改
封锁协议
一级:对写操作加写锁,直到事务结束,解决丢失修改 二级:对读操作加读锁,读完放锁,解决读脏数据 三级:对读操作加读锁,指导事务结束,解决不可重复读
活锁和死锁
参考操作系统的饥饿和死锁
活锁即一个事务可能永远等待(系统总是先批准其他事务的锁请求),可以采用先来先服务的策略解决。 死锁即两个事务互相申请对方锁住的资源导致两个事务永远不能结束。
死锁预防策略:
(1) 一次性封锁法:一次性封锁发要求每个事务必须一次将所有要使用的数据全部加锁 缺点:扩大封,从而了系统的;
(2) 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。 缺点:
死锁解除策略:
(1) 超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁; 缺点:可能死锁,事务因为其他原因使等待时间超过时限;若时限设置得太长,死锁发生后不能及时发现
(2) 等待图法:并发控制子系统周期性地生成,并进行检测,如果。 如果检测到死锁,一般采用的方法是,此事务持有的所有的,之后
意向锁
意向锁的含义是如果对一个节点加意向锁,则说明该节点的下层节点正在被加锁;对任一节点加锁时,必须先对它的上层节点加意向锁。如:对任一元组加锁,必须先对它的数据库和关系加意向锁。
意向锁分为三种:意向共享锁(IS)、意向排他锁(IX)、共享意向排他锁(SIX)。 (1)意向共享锁(IS) 如果对一个数据对象加IS锁,表示它的后裔节点拟(意向)加S锁。例如事务T1要对R1中某个元组加S锁,则首先对关系R1和数据库加IS锁。 (2)意向排他锁(IX) 如果对一个数据对象加IX锁,表示它的后裔节点拟加X锁。例如事务T1要对R1中某个元组加X锁,则首先要对关系R1和数据库加IX锁。 (3)共享意向排他锁(SIX) 如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁。例如对某个表加SIX锁,则表示该事务要读整个表,同时会更新个别元组在具有意向锁的多粒度封锁方法中,任意事务T要对一个数据对象加锁,必须先对它的上层节点加意向锁。申请封锁时应该按自上而下的次序进行,释放封锁时则应该按自下而上的次序进行。
A,IX和IX的可共存的,B是加上IX锁,C是对的,D是应对其所有上级节点都要加IS锁
可串行性
多个事务的并发执行结果与这些事务按照某个顺序顺次执行的结果相同。可串行性(Serializability)是并发事务正确调度的准则。
冲突可串行化
冲突操作是指对的操作和操作: Ri (x)与Wj(x) /* 事务Ti读x,Tj写x,其中i≠j*/ Wi(x)与Wj(x) /* 事务Ti写x,Tj写x,其中i≠j*/
如果一个调度Sc在保证冲突操作次序不变的情况下通过交换两个事务不冲突操作的次序得到另一个调度Sc‘,且Sc’是串行的,则称调度Sc是冲突可串行化调度
冲突可串行化带哦都是可串行化调度的充分条件,not必要
可以通过优先图判定冲突可串行
调度S的优先图有环,调度S是非冲突可串行化的,
冲突可调度: 冲突可调度 非冲突可调度
两段锁协议
封锁协议(Locking Protocol)即对数据对象加锁时约定的一些规则,如何时申请封锁、持锁时间、何时释放锁等。两段锁协议是最常用的一种封锁协议,使用。
两段锁协议是指每个事务必须分两个阶段对数据项加锁和解锁 (1) 在对任何数据进行读、写操作之前,首先要申请并获取对该数据的封锁 (2)
例:
事务T1遵守两段锁协议,其封锁序列是:
Slock A Slock B Xlock C Unlock B Unlock A Unlock C;
l← ~~~~~~ 扩展阶段 ~~~~~~ →l l← ~~~~~~~~ 收缩阶段 ~~~~~~~~~~~ →l
事务T2不遵守两段锁协议,其封锁序列是:
Slock A Unlock A Slock B Xlock C Unlock C Unlock B
遵守两段锁协议的事务任然可能发生死锁(区别一次封锁法)
封锁粒度(ppt上是画星)
封锁粒度就是封锁对象的大小
封锁的粒度越大,数据库能够封锁的数据单元就越少,并发就越小,系统开销越小 封锁的粒度越小,数据库能够封锁的数据单元就越多,并发就越大,系统开销越大
例:
- 若封锁粒度是数据页,事务T1需要修改元组L1,则T1必须对包含L1的整个数据页A加锁。如果T1对A加锁后事务T2要修改A中元组L2,则T2被迫等待,直到T1释放A。
- 如果封锁粒度是元组,则T1和T2可以同时对L1和L2加锁,不需要互相等待,提高了系统的并行度。
- 又如,事务T需要读取整个表,若封锁粒度是元组,T必须对表中的每一个元组加锁,开销极大
多粒度封锁:一个系统中同时支持多种粒度供不同事务选择
显式封锁,隐式封锁
显式封锁:直接加到数据对象上的 隐式封锁:间接加到数据对象上的,上级加锁 不想写了
解答题(老师说也可能放选择里面考)
简述数据库概念
数据库(Database,简称DB)是长期储存在计算机内、有组织(不仅存数据及联系)的、可共享的大量数据的集合。
数据库系统由几个部分组成
数据库 数据库管理系统(及其开发工具) 应用系统 数据库管理员
数据库的基本特征
数据结构化 数据的共享性高,冗余度低,易扩充 数据独立性高 数据由DBMS统一管理和控制
简述数据库系统特点
数据结构化 数据的共享性高,冗余度低,易扩充 数据独立性高 数据由DBMS统一管理和控制
关系具有6个基本特征是什么? (列三行二一表)
(1)列是同质的,既每一列中的分量为同一类型的数据,来自同一个域。 (2)不同的列可出自同一个域,称其中的每列为一个属性,不同的属性的要给予不同的属性名。 (3)列的顺序无所谓,即列的次序可以任意交换。 (4)任意两个元组不能完全相同。 (5)行的顺序无所谓,即行的次序可以任意交换。 (6)分量必须取原子值,即每一个分量都必须是不可分的数据库。
关系与关系模式有何不同?
- 关系是关系模式在某一时刻的状态或内容。
- 关系模式是静态的;关系是动态的。
- 关系模式是二维表的表头属性等,即一个二维表的主要架构。由于二维表的属性名一般不会修改,所以呈现出静态。
- 关系是一张二维表的具体数据,除去表头外各数据间的联系。由于二维表中是数据会时常修改,所以呈现出动态。
连接 ⋈
有关系如下所示: 关系代数S ⋈ R运算结果是什么?S与R按公共属性B进行的结果是什么? 自然连接:在等值连接的情况下,当连接属性X与Y具有相同属性组时,把在连接结果中重复的属性列去掉 写出关系代数S与R的按公共属性相等所进行的左外连接运算表达式,运算结果是什么?
简述数据库系统设计步骤及每个步骤的主要任务与文档
视图概念及其作用,什么是视图消解?行列子集与非行列子集如何区分?
概念:视图是从一个或几个基本表(或视图)导出的表,是一个虚表。数据库只存放视图的定义(sql语句),不存放视图对应的数据。视图一经定义,就可以被查询,删除,但是更新操作有一定限制。
作用: 1.简单性。简化复杂查询; 2.安全性。对基表中的其它列起到安全和保密的作用,可以限制数据访问。 3.逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。
视图消解:在执行对视图的查询时,首先进行有效性检查,检查查询中涉及的表、视图是否存在,如果存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换为对基本表的查询,在后在执行修正后的查询(简单说就是把对视图的查询转化为对基本表的查询称为视图的消解)
安全性概念,数据库系统常采取的安全性措施
概念:保护数据库防止恶意的破坏和非法的存取 措施:用户标识和鉴定,存取控制,视图,审计,密码存储
什么是SQL 注入入侵,解决方案有哪些?
SQL 注入入侵:欺骗服务器执行恶意的sql语句 解决方案:我只知道预处理,拜拜吧
数据库的完整性概念
数据库完整性(Database Integrity)是指数据库中数据在逻辑上的。
完整性类型
实体完整性 参照完整性 用户定义的完整性
完整性如何在插入、删除中体现。
遇到现编
简述什么是数据库的逻辑独立性与物理独立性,数据库系统采用什么技术手段保证它
物理独立性是指用户的与是相互独立的 逻辑独立性是指用户的与是相互独立的,当数据的逻辑结构改变时,用户程序也可以不变。
采用什么技术手段:二级映像 外模式/模式映像:保证了数据的逻辑独立性 内模式/模式映像:保证了数据的物理独立性
有二个事务如下所示:
T1:A=A*B+C; T2:B=B+A; (1)试设计一个符合两段锁协议且不产生死锁的可串行化调度,设A初值为2,B初值为5,C初值为1,你的设计是否冲突可串行化? (2)设计一个不符合两段锁协议且不产生死锁的可串行化调度,设A初值为2,B初值为5,C初值为1,你的设计是否冲突可串行化?
事务概念,事务的四个性质分别是什么名称与内容。
概念:访问并可能更新数据库中各种数据项 的一个程序执行单元 (unit)。 性质:ACID 原子性,一致性,隔离性,持久性
例举丢失更新,如何解决丢失更新——,对应的封锁协议——,MySQL对应的隔离级别是什么——。如何设置隔离级别? 例举读脏数据,如何解决脏数据——,对应的封锁协议——,MySQL对应的隔离级别是什么——。如何设置隔离级别? 例举不可重复读,如何解决不可重复读——,对应封锁协议——,MySQL对应的隔离级别是什么——。何设置隔离级别? 例举幻读,如何解决幻读,对应的封锁协议,MySQL对应的隔离级别是什么——如何设置隔离级别? 不用管丢失更新1,2
例举什么是死锁,常用的死锁有哪些解决方案。
死锁:两个事务互相申请对方锁住的资源导致两个事务永远不能结束 解决方案:超时法,等待图法。
粒度
什么是多粒度树,假设有XSCJ数据库,数据库系统将采取三级粒度形式,从上至下是数据库,表及记录,XSCJ数据库有表STU与COU,现在需对STU表的S001修改年龄属性,需要对各级粒度分别加上什么锁才可能成功实现修改。
假设有XSCJ数据库,数据库系统将采取三级粒度形式,从上至下是数据库,表及记录,XSCJ数据库有表STU与COU,当前系统有有事务T1与T2,T1需对STU表的S001修改年龄属性, 已获取所需要的锁,T2需要查询STU表中部分记录, 在三级记录树中需要对各级粒度如何加锁才可能成功实现修改。
理解三级封锁协议、两段封锁协议、一次封锁法、串行调度与可串行化调度、冲突可串行化调度及判定。
三级不用说 两端就是事务中出现解锁就不能上锁,上锁解锁连续。 一次封锁:一次将所有要使用的数据全部加锁 串行调度: 各个事务之间没有任何操作交错执行,事务一个一个执行 可串行化调度:多个事务的并发执行结果与这些事务按照某个顺序顺次执行(串行调度)的结果相同 冲突可串行化调度:如果一个调度Sc在保证冲突操作(rw,ww)次序不变的情况下通过交换两个事务不冲突操作的次序得到另一个调度Sc‘,且Sc’是串行的,则称调度Sc是冲突可串行化调度。判定方法:优先图
简述数据库系统故障的恢复过程。
书本P305页题目4,5
假设系统采用备份策略是,每周星期天的夜间00:00静态海量备份(包括日志备份)一次,每天夜间00:00动态增量备份一次。系统每20分钟发一次检查点命令。故障发生于周三上午9:30.
静态备份是没有未提交的事务 ,不需要撤消,如果是动态就需要撤消未完成的事务。
安装一份海量备份,3分增量备份:对检查点到9:30之间的根据日志进行重做,对于故障发生未完成的撤销。(注意区分,下面的是静态增量)
简述数据库系统发生软故障(即)的恢复过程。假设系统采用备份策略是,每周星期天的夜间12:00静态海量备份(包括日志备份)一次,用时2个小时,每天夜间12:00动态增量备份一次。用时20分钟,系统每小时发一次检查点命令。故障发生于周三上午9:30.。
不需要安装备份。对检查点前已提交的不操作,故障时未完成的撤销,检查点到故障时已完成的重做。
解释SQL语句的执行计划如下,分析索引优化。
关于Tyep
云数据库有什么特点,与传统数据库系统有什么区别?
解释其主要特点:计算与存储分离、日志即数据库 什么是顺序写、随机读? 什么多版本并发控制机制(MVCC),与锁定机制的差别。
应用题
设数据库Dept_Emp有二个基本表: 部门表:DEPT(DNO CHAR(2),DNAME VARCHAR(20),MGR_ENO CHAR(4))其属性分别表示部门号,部门名,部门经理职工号。表名为DEPT。 职工表:EMP(ENO CHAR(4),ENAME CHAR(8),AGE TINYINT,SEX BIT,SALARY NUMERIC(6,1),DNO CHAR(2)),其属性分别表示职工的工号,姓名,年龄,性别,工资,所工作部门的编号。表名为EMP,其中SEX中0表示男性,1表示女性 试写出完成下列要求的SQL(或关系代数)语句 1.检索所有工资高于10000元且年龄在30至40间职工号、姓名及所在部门名(SQL)(2分)
select eno,ename,dno from emp join dept on salary > 10000 and age > 30 and age < 40;
2.检索所有工资高于20000元且“部门名(关系代数)(2分)
select eno,ename,dno from emp join dept on salary > 20000 and age > 30 and age < 40;
3.画出题2的优化树 两种画法都行
4.根据题3的优化树创建合适的索引实现物理优化,假设公司总共有50个部门,每个部门员工人数平均1000,每个部门工资高于20000元的员工数据大约占10%,员工年龄分布于18-60间,基本平均分布(SQL),根据启发式规则分析创建索引与无创建索引时的查询效率(3分)。
CREATE INDEX Index_Pers ON EMP (salary,age) ;
5.检索各部门的平均工资(注可能有部门仅刚成立,尚无人员)(2分)
select avg(salary) from EMP join DEPT on EMP.dno = DEPT.dno group by DEPT.dno;
6.检索平均工资高于8000元的部门号、部门名及具体的平均工资(SQL)(2分)
select DEPT.dno,DEPT.dname,avg(salary) from EMP join DEPT on EMP.dno = DEPT.dno group by DEPT.dno having avg(salary)>8000;
7. (1)创建存储过程P1删除某部门及其相关信息。
creat procedure p1(inputDno char(2))
begin
delete from EMP where dno = inputDno;
delete from DEPY where dno = inputDno;
end;
(2)运行该存储过程,完成‘01’号部门的职工删除(注意事务的应用)(4分)
call p1('01');
8.将员工‘E001’转部门,从‘行政部’门转至‘人事部’,并成为人事部门的经理(注意事务成功与失败的两种情况处理)。(3分)
start transaction;
update emp set eno = ’人事部号' where eno='E001'; update dept set mgr_eno = 'E001' where dno = '人事部号';
commit;
start transaction;
update emp set eno = ’人事部号' where eno='E001'; update dept set mgr_eno = 'E001' where dno = '人事部号';
rollback;
9.创建视图,视图名为V1,属性为(ENO,ENAME, DNAME)。说明该视图是否行列子集视图?(SQL) (3分)
create view view_name(ENO,ENAME, DNAME) as select ENO,ENAME, DNAME from emp;
10.设数据库服务器中已有用户U1,将对EMP表的查询与修改权授予用户U1(SQL)(2分)
grant select,update on emp to u1;
11.针对SQL SERVER写出表DEPT表定义,必须定义主键,若有外键必须定义外键,DNAME、DNO非空且唯一(SQL)。(3分)
create table dept(
dno char(2) primary key,
dname varchar(20) not null unique,
mgr_eng char(4),
constraint fk_forkey_name foreign key (dno) references(emp.dno)
);
12.为EMP表定义以下约束。SALARY必须在大于0,小于200000(SQL)(2分)
alter table emp add check(salary>0 and salary<200000);
13.设计一个触发器,每个部门的员工人数不得大于20人(SQL)。(3分)
create trigger trigger_name
before insert
on emp for each row
begin
if(select count(*) from emp where dno = New.dno)>20 then
signal sqlstate '45000' set message = '插入员工失败,人数超过20';
end if;
end;
四、数据库设计题(约15分)。(从以下四个类型需求中考试) 1)试画出ER图,图上应包括实体、(属性可省略),联系及其类型。(8.5分)注:ER图采用PPCHEN表示方式 ,即实体用矩形框,联系用菱形框等 2)将ER转换成关系模型(该关系模式应为3NF,若非3NF需说明理由),注明各关系模式的主键(用下划线)和外键(用下划波浪线)(8.5分)
1.图书管理系统 这是一个图书馆的管理系统,只要是图书馆的读者,都可以借阅图书;每个读者在办理图书证时须缴纳一定的押金、登记身份证号、姓名、电话、联系地址,并将身份证扫描存储等;图书使用馆藏编号,ISBN编码,作者,出版社,价格,版次,出版时间等描述;每个出版社可出版多本图书,但每本图书只可以是一个出版社出版;每个作者可以编著多本图书,每本图书也可以多个作者编著;对于馆藏编号使用国家规定的中图分类规则编码;图书馆同一个ISBN号的图书可能购买多本,每本具体的图书都必须记录其入库时间,并且类似超市货物具有唯一的图书条形码;读者每借阅一本图书必须登记借书时间,还书时间等相关信息;软件系统还必须实现借书逾期及续借的业务处理,图书馆规定每本书最多只能借60天,只能续借一次,续借时长为30天,若逾期每本书每天罚款0.1元,若丢失则原价的1.2倍赔款,每个读者最多只能借10本书并且所借阅图书的金额必须不超过押金,对于馆藏仅一本的图书不允许外借,只可在馆阅读;每个读者借书时可能发生借书逾期问题,丢失、缺页问题等,系统也应提供相应的处理。 2. 教学教务管理网站,参考实验要求 3.淘宝的“我的订单”模块中订单及订单明细的设计,用户需登录才可以看到自已的订单 4.厦门航空的查询航班动态及价格的网站,如下所示:
五、范式应用题(约12分)。 1)有描述学期学生成绩关系模式Student(MNO,MNAME,SNO,SNAME,CNO,CNAME,TNO,TNAME,GRADE),分别表示专业号,专业名,学号,姓名,课程号,课程名,教师号,教师名及成绩,存在的语义如下所示:每个专业有唯一的专业号,每个学生有唯一的学号,每个教师有唯一的教师号,每个开课课程有唯一的课程号,名字都可能重复。每个专业有多名学生,每个学生只能属于一个专业;每个专业有多个老师,每个老师只能属于一个专业;每个老师可以教授多门课程,每门开课课程只能一个老师教授;每个学生选修一门课程有唯一的成绩,对应唯一的老师。 要求: 先找一下主码应该是:{SNO,CNO} (1)写出该模式的最小函数依赖集. 所有的关系: F={MNO->MNAME, SNO->SNAME,MNO TNO->TNAME,MNO CNO->CNAME,TNO SNO,C