软考数据库工程师
重点
事务调度
1. 串行调度
多个事务依次(顺序)串行执行
,且只有当一个事务的所有操作都执行完成
才执行另一个事务的所有操作
2. 可串行化调度:并发调度
多个事务并发执行是正确的。当且仅当其并发结果
与某一次序串行地执行的结果相同
并发问题
1. 丢失修改:
两个事务对同一个数据进行修改,导致事务A对数据库的修改 被事务B的修改所覆盖
2. 不可重复读
3. 读脏数据
封锁协议:三级封锁协议
2段锁协议
两段锁协议:2pL: 同一事务对任何数据进行读写之前 必须对该数据加锁,在释放一个封锁之后,该事务不在申请和获得任何其他封锁
两段锁: 获得封锁, 释放封锁
遵循两段锁协议 一定可串行化,不遵循两段锁,可串行化,也不可串行化
两段锁协议可能产生死锁: 因为每个事务都不即时解除被封锁的数据,可能导致多个事务都要求对方一封锁的数据二不能继续运行。
隔离级别
1. 触发器
create trigger 触发器名称 [before|after][delete |INSERT |UPDATE OF 列名]
ON 表名referencing [new row as nrow| old row as orow]
[for each row|for each statement]
[with <触发条件>]
begin<触发动作>
end [触发器名称]
2. 游标
定义游标 exec sql declare 游标名称 cursor forselect 语句
打开游标 exec sql open 游标名称
推进游标 exec sql fetch 游标名 into 变量表
关闭游标 exec sql close 游标名称
3. 存储过程
create procedure 存储过程名(in|out|in out 参数1 类型名称,in |out|in out 参数2 类型名称)
[as]
beginsql语句
end
in :输入参数
out: 输出参数
in out: 既可以输入参数 又可以输出参数
4. 视图
create view 视图名(列表)
as select 查询子句
with check option
事务
学习视频链接
链接: https://pan.baidu.com/s/1rzDV8G9ILdaKEulmTlRRFw?pwd=1111 提取码: 1111 复制这段内容后打开百度网盘手机App,操作更方便哦
2011-2018真题 https://pan.baidu.com/s/1KkhUst1c0fPJJZp466p-OQ提取码:2058
中级数据库系统工程师考试_山与先生的博客-CSDN博客
中级数据库系统工程师考试_山与先生的博客-CSDN博客
2020年中级数据库系统工程师考试笔记12—事务管理_2020数据库系统工程师-CSDN博客
小题
计算机网络
tcpip 协议栈
OSI 7层模型
网关:应用层,传输层以上都是报文:协议转换
路由器:网络层,数据包
网桥,交换机:数据链路层
中继器,集线器:物理层
网路 设备总结
网络分类
主动攻击与被动攻击
1. 主动攻击:篡改数据,产生虚假信息
2. 被动攻击,窃听或者流量分析
防火墙:隔离外部网络与受保护的内部网络
1. 包过滤防火墙: 用户透明,包含在路由器数据包中
2. 应用代理网关防火墙:切断内外网痛惜,所有通信必须经过应用层软件转发
3. 状态检测技术防火墙:结合1和2,
入侵检测与防御
常见攻击方式
1. 重复攻击: 发送一个目的主机接受过的包,欺骗系统的目的
2. 会话劫持: 攻击者在初始授权之后建立一个连接,在会话劫持之后,攻击者具有合法的用户特权
Internet基础知识
域名
子网掩码
计算机系统 的组成
cpu
输入输出控制
计算机体系结构
流水线
存储系统
地址映像
安全,可靠系统性能评测
1.对称加密
2. 非对称加密(公钥加密):RSA
3. 数字签名:发送者A私钥加密,发送者A公钥解密
不能保证信息保密(发送原文),确认信息发送者是否被修改
4. 数字加密:对称和非对称加密:信息保密(加密)无法确定发送者身份(公钥公开)
程序语言知识基础
编译程序 和解释程序
解释程序:每次都要解释,边解释,边运行
编译程序:一次编译,终身运行,编译成目标程序
数据成分
编译过程
- 词法分析: 单词,符号
- 语法分析: 合法表达式,语句和程序
- 语义分析:** 类型分析 和检查
- 中间代码生成: 后缀表达式
- 动态错误: 运行时,1/0 下标越界
- 静态语法错,编译器idea,检查错误
传值和引用调用
中,前,后缀表达式
前后缀都是栈
数据结构
二叉树
排序
直接插入排序
冒泡排序
简单选择排序
希尔排序
快速排序
堆排序
归并排序
总结
图算法
最小生成树
最小生成树算法: 普利姆算法(顶点) 克鲁斯卡尔(边)
查找
二分查找:顺序表,有序
索引顺序查找(分块查找):块内不一定有序,块间有序。
hash冲突解决办法:
数据库基本内容
三级模式和两级映像
数据模型和三要素
关系数据库
相关名词
元组/记录:行
字段属性:列
关系模式表示
完整性约束
关系运算
基本的关系代数运算
1.并(union)
2.差
3. 笛卡尔积:合并后 相同项不取消
4. 投影:选择若干属性作为新的关系:(列)
5. 选择(行)
6. 交
7. 连接:先笛卡尔积再 选择(行)
普通的连接
等值连接
自然连接:
(所有
)相同的属性值 并去掉重复的属性列
8. 除法
9.外连接:去掉重复的列属性
- 左外连接:左为准,右填充
- 右外连接:右侧为准,左填充
- 全外连接
10. 总结
几个属性/列:就是几元关系
查询优化
1.优化准则
2.列题:先选择,再投影,再自然连接
关系规范化
1. 函数依赖
**X(学号,课程号) -> Y(课程号) **
SC(sno,cno) : X-> sno : Y 平凡依赖
2. 完全函数与部分函数依赖
3. 传递依赖
4.码
1. 主码和候选码
SC(sno,pno,sname,status,city,qty)
U={sno,pno,sname,status,city,qty}:全部属性集合
F={Sno→Sname,Sno→Status,Status→City,(Sno, Pno)>Qty} 函数关系
K={sno,pno}的真子集{sno},{pno} 都无法确定U
所以k就是候选码,如果存在多个候选码选择一个当主码
2. 外码
5. 多值传递依赖
范式
候选码
第一范式:属性不可再分
第二范式:1范式消除了 非主属性对码()的部分函数依赖
第三范式:2范式 消除了非主属性对码的传递函数依赖
BCNF: 3nf 消除主属性 对码 部分函数依赖和传递函数依赖
第四范式:多值依赖只有两个依赖关系。U-X-Y=Z Z是空集
范式总结
例题
候选码求解和无损连接
候选码求解
无损连接
例题
SQL
DDL: 提供定义关系模式和视图、删除关系和视图、修改关系模式的命令
DML:增删改
DQL: 查
asc:升序, desc :降序
不等于:<>
**distinct: 去重**
数据库表
属性的数据类型
创建数据库表
CREATE TABLE 表名称
(
列名称1 数据类型 列完整性约束条件,
列名称2 数据类型 列完整性约束条件,
列名称3 数据类型,列完整性约束条件,
…
表级完整性约束
);
主键约束
(1)在列后面加 PRIMARY KEY
(2)在最后加PRIMARY KEY(属性名1,属性名2)
//主码为属性组(两个或以上属性的组合)只能
属性值上的约束
非空 NOT NULL
-
不允许重复 UNIQUE
-
按条件检查 CHECK (条件)
-
非空 NOT NULL
-
NOT NULL UNIQUE:表示取值唯一且不为空
注意:PRIMARY KEY=NOT NULL+UNIQUE。
CHECK (Sex='男' OR Sex='女'),CHECK (余额>=0),CHECK (年龄>=18 AND 年龄<=60)
参照完整性
(1)在列后面加 References 表名(属性名)
(2)在最后面加,有几个外码,就写几行。
Foreign Key (属性名) References 表名(属性名)
[ON DELETE [CASCADE|SET NULL]
ON DELETE CASCADE 表示删除被参照关系的元组时,同时删除参照关系中的元组;
ON DELETE SET NULL表示删除被参照关系的元组时,将参照关系的相应属性值置为空值。
练习题
create table S(sno char(5) not null unique,sname char(30) unique,status char(8),city char(20),primary key(sno)// 此处隐含Sno唯一且不为空,列级完整性约束可不写
);create table P(pno char(5) not null unique,pname char(30) unique,color char(8),weight numeric(6,2),//整数6位 小数两位city char(20),primary key(pno)
);create table SP(sno char(8),pno char(8),status char(8),Qty numeric(9),primary key (sno,pno),//主键为属性组合foreign key sno references S(sno),foreign key pno references P(pno)
);
2020年中级数据库系统工程师考试笔记9—SQL语言_数据库系统工程师是那种sql语言-CSDN博客
修改数据库表
ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ DROP <原列名>|<完整性约束名> ]
[MODIFY <原列名> <数据类型> ];例子:
ALTER TABLE Student ADD Scome DATE not null;// 增加一列scome
ALTER TABLE Student MODIFY sno varchar(13);// 修改 sno的数据类型为varchar
ALTER TABLE Student DROP stuNum;// 删除属性stuNum
删除数据库表
drop table 表名
drop table scs
索引
创建索引
CREATE INDEX index_name ON table_name (column_list);
create index index_cn on sc(cno);
CREATE UNIQUE INDEX index_name ON table_name (column_list);
create unique index index_name on table_name (column_list);
删除索引
drop index (索引名)
drop index studentIndex//删除索引studentIndex
视图
创建视图
CREATE VIEW 视图名(列表名)
AS SELECT 子查询
[WITH CHECK OPTION] --可以省略;create view v_student (name,age,sex,id,source)
as select * from student
with check option;
删除视图
drop view 视图名
drop view cs_student//删除视图cs
查询更新视图
create view cs_view
as
select sno ,sname,sage,sex
from student
where sd='sd'
with check option;
数据操作
select
SELECT [ALL|DISTINCT [字段或目标列表达式]
FROM table_name
[ WHERE search_condition]
[ GROUP BY group_by_expression]
[ HAVING search_condition]
[ ORDER BY order_expression [ ASC|DESC ] ]
(1)先从from字句一个表或多个表创建工作表;
(2)将where条件应用于(1)的工作表,保留满足条件的行;
(3)Group By 将(2)的结果分成多个组;
(4)Having 将条件应用于(3)组合的条件过滤,只保留符合要求的组;
(5)Order By对结果进行排序。:asc: 升序 desc:降序
不等于:<>
连接查询
子查询
聚集函数
select name,age from S where age<all(select age from s where sd='计算机') and sd <> '计算机'
select name,age from S where age<(select min(age) from S where sd='计算机') and sd<>
'计算机'
分组查询
字符串操作
集合操作:UNION (并) intersect (交) except(差)
左外连接
右外连接
全连接
左外连接 union 右外连接
insert into
insert into 表名(列名1,列名2...) values (值1,值2,。。。)
delete
update
update 表名 set 列名=新值 where 条件表达式
授权
赋予权限
grant All privileges on table/database 表名/数据库名
to 用户1,用户2 /public
with grant option
//public :表示授权限 授予所有人
// with grant option: 表示获得权限的用户可以将权限赋给其他用户
题目
grant all privileges on table s,p,j to user1,user2
grant insert on table s to user1 with grant option
grant createtab on database spj to user1
收回权限
remove 权限 on table/database 表名/数据库名
from 用户1,用户2./public
restrict
cascaderemove all privileges table s,p,j from user1,user2 ;remove select table s from public;
remove update(sno) on table S from user1;
触发器
创建触发器
CREATE <触发器名> < BEFORE | AFTER >
<INSERT | DELETE | UPDATE OF[列名清单]>
ON <表名>
[REFERENCING <临时视图名>]
[FOR EACH ROW|FOR EACH STATEMENT]
[WHEN <触发条件>]
BEGIN
<触发动作>
END[触发器名]
(1)BEFORE | AFTER:只是DBMS在执行触发语句之前或之后激发触发器;
(2)INSERT | DELETE:分别表示每当一个insert语句向表中插入一行数据时激发触发器、每当delete语句从表中删除一行时激发触发器;
(3)UPDATE/UPDATE OF:每当update语句修改表任何列值时,DBMS都将激发触发器,每当update语句修改有of子句指定的列值时激发触发器;
(4)REFERENCING:指定临时视图的别名,在触发器运行过程中,系统会生成存放更新值(旧值)和更新后的值(新值)的临时视图,行级触发器视图名为OLD和NEW,语句级触发器,默认视图名OLD-TABLE和NEW-TABLE,触发器运行结束,视图也就不存在了;
(5)WHEN:指定触发器的触发条件,触发条件必须包含临时视图名,不包含查询
事务和锁
事务
基础知识点
事务的4大特性
大题
数据库故障与恢复
1. 数据库故障
事务故障
事务故障是由于程序执行错误而引起事务非预期的、异常终止的 故障。通常有如下两类错误引起事务执行失败:
(1)逻辑错误。如非法输入、找不到数据、溢出、超出资源限制等原 因引起的事务执行失败。 (2)系统错误。系统进入一种不良状态(如死锁),导致事务无法继 续执行。
解决办法:
事务故障的恢复:事务故障是事务在运行至正常终止点(SUMMIT或ROLLBACK)前终止,日志文 件只有该事务的开始标识而没有结束标识。对这类故障的恢复通常是通过撤销(UNDO)产生故障的 事务。
系统故障
系统故障:是指硬件故障、软件(如DBMS、OS===或应用程序)漏洞的 影响,导致丢失了内存中的信息,影响正在执行的事务,但未破坏存储在外存上的信息。
解决办法:
系统故障的恢复:系统故障会使数据库的数据不一致:
一是未完成的事务对数据库的更新可能已经写入数据库;
二是已提交的事务对数据库的更新可能还在缓冲区没来得及写入数据库。
因此对于系统故障,恢复操作是UNDO+REDO:
1、撤销故障发生时未完成的事务(UNDO)。
2、重做已经提交的事务(REDO)
介质故障
介质故障:是指数据库的存储介质发生故障,如磁盘损坏、瞬间强 磁场干扰等。这种故障直接破坏了数据库,会影响到所有正在读取这部 分数据的事务
解决办法:
介质故障的恢复:介质故障时数据库遭到破坏,需要重装数据库,一般需要DBA的参与,装载 故障前最近一次的备份和故障前的日志文件副本,再按照系统故障的恢复过程执行撤销(UNDO)和 重做(REDO)来恢复
2. 数据库恢复
1. 故障恢复操作
撤销事务(undo)
将未完成的事务撤销,使数据库恢复到事务执行前的正确状态。
插入的记录从数据库中删除,
删除 的记录重新插入数据库中;
更新操作并执行逆操作直至事务开始标志。
重做事务(REDO)
将已提交的事务重新执行。
从事务的开始标志起,正向扫描日志文件,重新执行日志文件登记的该事务 对数据库的所有操作,直至事务结束标识
3. 数据库恢复真题步骤
检查点机制
检查点机制(CHECKPOINT):在日志中设置检查点,当发生故障需要利用日志文件 恢复时,反向扫描日志文件,找到检查点,确认检查点时刻正在执行的事务(活动 事务),即检查点前有事务开始标志但没有事务结束标志。
事务开始标志:start 事务结束标志: commit 或者 callack
对于检查点后提交的事务,执行REDO(重做) :继续更改
对于检查点后未提交的事务,执行UNDO(撤销):撤销更改
解题思路
1、找到检查点(CHECKPOINT)
2、观察检查点之前有START标志的事务。
3、将这些事务分为以下三类:
(1)在检查点之前提交(COMMIT)的事务:这类事务在检查点时已经正 常结束,并不是活动事务,它所做的所有操作已经更新到了数据库,在 恢复时不用做任何操作。
(2)在检查点之后提交的事务:这类事务在检查点时并没有正常结束, 是活动事务,故障恢复时需要做REDO(重做)。
(3)在检查点之前和之后都没有提交的事务:这类事务在检查点时并 没有正常结束,是活动事务,故障恢复时需要做UNDO(撤销)。
4. 真题练习
2020
题目
问题
答案
2021
题目
问题
答案
2022
题目
问题
答案
2023
题目
问题
答案
ER图
常考类型
1、两方联系:两个实体之间产生联系。说明中的句式类似AB,BA。
一个库管员(A)可以管理多个仓库(B),每个仓库(B)有一名库管员(A)
AB BA
2、三方联系:当同一联系需要三方同时参与的时候就是三方联系。说明中的句式 类似AB,BC。
一个订单(A)包含多类服装(B),每类服装(B)可以由多个不同的供应商(C)供应
AB BC
3、弱实体:一个实体的存在必须以另一个实体为前提。
4、聚合:将联系作为实体,与其他的实体产生联系。 即两个实体A和B先产生联系,联系本身再与C产生联系,需要用方框把A和B之间的 联系框起来。先后顺序
租客租赁公寓必须和公司签订租赁合同。一份租赁合同通常由一个或多个租客(合租)与该公寓楼的经理签订,一个租客也可租赁多套公寓。
**租客和公寓组成租聘合同,然后和经理签约**
5、子实体:一个实体集可以按照某些特征区分为几个子实体。
6、同一实体集内的联系:同一实体集内的两个实体之间相互存在着一定的关系。
PS:三方联系与聚合的区别:三方联系必须要三方实体同时参与,缺一不可。而聚 合是有先后顺序的,两个实体先产生联系,再与第三个实体产生联系。
小tips
我们画E-R图采取的方法为:
1、依据需求分析中的文字说明来判断。
2、依据逻辑结构设计(关系模式)来判断。
3、依据现实中的生活经验来判断
ER图-逻辑结构相互转换
真题
真题总结
- 主码一定是唯一 确定一条信息。
- 主码下划线实线 ,外码 下划线是虚线
- 主码是(a,b)属性组合
2023
题目:主键或者主码是对应唯一的一条信息:要加上日期
问题
答案
2022
题目
问题
答案
注意事项:为什么第二个的主码为(省份证号,接种日期)
- 主码可以确定唯一的消息。 如果选择(省份证,医院名称,供应商名称):就会产生多个记录(不同日期):不满足唯一性
- 题目中规定每人每天可以接种一次。故可以采用省份证号,接种日期做为主码
同上。选择(省份证号,检测日期) 作为主码
2021
题目
主码:用实线下标标出来了
问题
2020
题目
问题
答案
注意事项:
主码:唯一性 快递员的姓名不一定唯一,所以选择手机号作为主码
2019
题目
问题
答案
2018
题目
问题
答案
关系规范化
做题方法总结
1. 找候选码
记住候选码的含义:候选码可以决定关系模式中的所有属性,且候 选码的任何一个真子集都不能单独决定全属性
2. 范式判断
(1)有非主属性对码(候选码)的部分函数依赖的,不满足2NF
(2)有非主属性对码的传递函数依赖的,不满足3NF
(3)有主属性对码的部分和函数依赖的,不满足BCNF
(4)有多值依赖的,形如X→→Y,X和Y必在一个关系模式,且只有X和Y, 不能有其它多余属性。如果有,不满足4NF
3. 分解关系模式
**多值函数依赖**
: 多值函数依赖分在一起
**传递函数依赖**
:就将传递函数依赖分开
**部分函数依赖**
:部分函数依赖分开
总结
真题
2023
2022
2021
2020
2018
2017
2016
2015
SQL
1. 触发器
create trigger 触发器名称 [before|after][delete |INSERT |UPDATE OF 列名]
ON 表名referencing [new row as nrow| old row as orow]
[for each row|for each statement]
[with <触发条件>]
begin<触发动作>
end [触发器名称]
2. 游标
定义游标 exec sql declare 游标名称 cursor forselect 语句
打开游标 exec sql open 游标名称
推进游标 exec sql fetch 游标名 into 变量表
关闭游标 exec sql close 游标名称
3. 存储过程
create procedure 存储过程名(in|out|in out 参数1 类型名称,in |out|in out 参数2 类型名称)
[as]
beginsql语句
end
in :输入参数
out: 输出参数
in out: 既可以输入参数 又可以输出参数
4. 视图
create view 视图名(列表)
as select 查询子句
with check option
事务
事务调度
1. 串行调度
多个事务依次(顺序)串行执行
,且只有当一个事务的所有操作都执行完成
才执行另一个事务的所有操作
2. 可串行化调度:并发调度
多个事务并发执行是正确的。当且仅当其并发结果
与某一次序串行地执行的结果相同
并发问题
1. 丢失修改:
两个事务对同一个数据进行修改,导致事务A对数据库的修改 被事务B的修改所覆盖
2. 不可重复读
3. 读脏数据
封锁协议:三级封锁协议
2段锁协议
两段锁协议:2pL: 同一事务对任何数据进行读写之前 必须对该数据加锁,在释放一个封锁之后,该事务不在申请和获得任何其他封锁
两段锁: 获得封锁, 释放封锁
遵循两段锁协议 一定可串行化,不遵循两段锁,可串行化,也不可串行化
两段锁协议可能产生死锁: 因为每个事务都不即时解除被封锁的数据,可能导致多个事务都要求对方一封锁的数据二不能继续运行。