type
slug
status
summary
icon
category
date
tags
password
5.1 数据库管理
- 数据库管理的概念:数据库管理(Database Management)是指为保证数据库系统的正常运行和服务质量必须进行的系统管理工作。
5.2 事务管理
- 在数据库应用系统中,完成一个业务处理通常需要多个操作步骤才能完成处理。在每个操作步骤中,都可能遭遇失败,若没有一个处理机制,就可能造成操作数据混乱,从而破坏数据一致性。
5.2.1 事务的概念
- 事务的概念:事务(Transaction)是指由构成单个业务处理单元的一组数据库访问操作,要求它们要么都成功执行,要么都不执行。(相当于是数据库管理系统中的原子操作了)

5.2.3 事务状态
- 事务的状态:在数据库系统中,事务是DBMS执行的最小任务单元。同时,事务也是DBMS最小的故障恢复任务单元和并发控制任务单元

也就是如果执行失败的话就要回滚到这一个事务执行前的状态(所以说事务也是最小的故障恢复任务单元)
5.2.3 事务特性
- 事务ACID特性
- 原子性(Atomicity):事务所有操作在数据库中要么全部执行,要么全部不执行。
- 一致性(Consistency):事务多次执行,其结果应一致。
- 隔离性(Isolation):事务与事务之间隔离,并发执行透明。
- 持续性(Durability ):事务完成后,数据改变必须是永久的。
5.2.4 事务并发执行
- 事务并发执行原因(跟操作系统要并发很像)
- 改善系统的资源利用率
- 减少事务运行的平均等待时间
5.2.5 事务SQL程序
- 常用的事务SQL语句
- BEGIN 或 START TRANSACTION :事务开始语句(一般是在事务开始时使用)
- ROLLBACK :事务回滚语句(回滚到保存点或者是当前事务开始,一般在事务结尾使用。回滚到保存点需要执行保存点的名称)
- COMMIT :事务提交语句(一般是在事务结束的时候使用)
- SAVEPOINT :事务保存点语句(在事务创建一个保存点)

例:在选课管理数据库CurriculaDB中,使用事务程序实现对学院信息表College的数据插入,其事务SQL程序如下:
- 事务程序中不能使用的SQL语句
- 创建数据库 CREATE DATABASE
- 修改数据库 ALTER DATABASE
- 删除数据库 DROP DATABASE
- 恢复数据库 RESTORE DATABASE
- 加载数据库 LOAD DATABASE
- 备份日志文件 BACKUP LOG
- 恢复日志文件 RESTORE LOG
- 授权操作 GRANT
。。。
- DBMS默认事务方式
- 若用户没有显式地定义事务时,DBMS按默认事务方式处理,即每执行一个SQL语句将自动构成一个事务。若将多条SQL语句定义为一个事务时,才使用专门的事务SQL语句显式地定义事务。
5.3 并发控制—事务调度
- 为什么需要并发控制?
- 当多个事务程序在DBMS系统中同时运行时,可能会出现对一些共享数据同时进行访问操作,如一些事务修改数据,另一些事务读取数据。这些并发的共享数据操作,如果在DBMS中没有一定的约束控制情况下,可能会带来数据不一致性或事务程序死锁问题。因此,在多个事务并发运行时,必须进行并发控制处理。
- 并发控制目的
- 支持并发事务处理,使更多用户并行操作,提高系统的并发访问能力。
- 保证一个事务工作不会对另一个事务工作产生不合理的影响。
- 并发控制需要解决的问题
- 丢失,数据不一致,脏数据(读取了一个被取消持久化的数据,因为ROLLBACK)
- T1、T2两个事务并发执行,它们均对数据库共享数据A进行了非锁定资源的读写操作。
- 当事务T1和T2均读入该共享数据A并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。

错误分析:

问题分析: 为什么出现不可重复读取?
事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值。
同类问题:
(1)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录消失了。也称为不可重复读取。
(2)事务T1按一定条件从数据库中读取某些数据记录后,事务T2在其中插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。称为幻象读取。
之所以将插入单独列出来称为幻象读取
是因为新数据的插入除了对聚合函数结果有影响,并没有影响原有数据。
因此对多次读取发现数据有新增的容忍度会高一些

并发事务调度就是控制多个事务的数据操作语句按照恰当的顺序访问共享数据,使这些事务执行之后,避免造成数据的不一致性,即解决“丢失更新数据”、“不可重复读”、“脏数据读”等问题。
- 事务调度原理:在DBMS中,事务管理器将并发执行事务的SQL数据操作请求提交给并发控制调度器。由并发控制调度器将各个事务的SQL数据操作请求按照一定顺序进行调度执行,并完成对数据库缓冲区的读写操作。
- 事务调度策略(甚至都不知道这一小点为什么要叫策略。应该是在介绍怎么调度的吧)
- 可串行化调度:在事务并发执行中,只有当事务中数据操作调度顺序的执行结果与事务串行执行结果一样时,该并发事务调度才能保证数据操作的正确性和一致性。符合这样效果的调度称为可串行化调度(就是事务并行的结果与事务串行的结果相同)
- DBMS并发事务调度目标:使并发事务调度实现的处理结果与事务串行化调度处理结果一致。(就是要让并发控制调度器的调度是一个可串行化调度)
给一组事务和调度,判断执行顺序是不是正确的

可串性化:先做t1再做t2的结果和先做t2再做t1的结果,然后再算一下题上调度的结果=t1t2/t2t1,则代表调度正确

(1)X锁:排他锁
只有这个事务才能读取和修改这个数据对象,其他事务不可加锁。
Xlock(),Unlock()
(2)S锁:共享锁
读锁,该事务可以读取但是不可以修改数据对象。其他事务可以对这个数据对象添加S锁,但是不能添加X锁

一级封锁协议:写前加写锁,事务结束后释放写锁。
二级封锁协议:写前加写锁,读前加读锁,读完释放读锁,事务结束后释放写锁。
三级封锁协议:…事务结束后释放所有锁


这里面的XY都是局部变量.先计算出AB

A=30,B=100
判断是否正确:先做t1再做t2,然后先做t2再做t1。

先t2再t1,A=20,B=200

先t2后t1,A=110,B=100
然后再算一下题上调度的结果=t1t2/t2t1,则代表调度正确.这里说明调度错误。








结论:在事务并发执行中,只有当事务中数据操作调度顺序的执行结果与事务串行执行结果一样时,该并发事务调度才能保证数据操作的正确性和一致性。符合这样效果的调度称为可串行化调度。
DBMS并发事务调度目标:使并发事务调度实现的处理结果与串行化调度处理结果一致。

LOCK-X(A);Unlock(A)
在t1结束的同时t2:LOCK-X(A),在t1:Unlock(A)时,t2获得锁定
执行结束后释放

三级加锁协议:在一级加锁协议基础上,针对并发事务对共享数据进行读操作,必须对该数据执行共享锁定指令,直到该事务处理结束才释放共享锁定。

5.3.6 两阶段锁定协议
- 两阶段锁定协议:用于保证调度的可串行化(也就是能保证事务的正确调度)。分为下面两个阶段
- 增长阶段,事务只能获得锁,但不能释放锁。
- 缩减阶段,事务只能释放锁,但不能获得新锁
若并发事务执行的所有事务都遵从两阶段锁定协议,则这些事务的任何并发调度都是可串行化调度,即这些并发调度执行结果可以保证数据库一致性


5.3.6 死锁问题解决
- 事务死锁:在多个事务竞争共享资源的情况下,出现的相互永远等待的封锁请求,若无外力作用,这 些事务永远不能向前推进,称为死锁(跟操作系统中死锁的定义是完全相同的)
- 死锁出现的必要条件(狠狠背)
- 互斥条件
- 请求和保持条件
- 不剥夺条件
- 环路等待条件
- 防范死锁的策略(破坏死锁的必要条件?)
- 允许用户一次发出当前所需全部资源的锁定,使用完成后,再释放给其它用户访问——破坏请求和保持条件
- 规定所有应用程序锁定资源的顺序必须完全相同——破坏环路等待条件(操作系统中说的,按照序号递增顺序提出资源申请,按照序号递减顺序释放资源)
- 解决死锁的方法:当发生死锁时,回滚其中的一个事务,并取消它对数据库所做的改动(在操作系统中就不能这么直接的处理了,因为进程之间如果锁住了就很难再将进程恢复到上一个状态了,开销太大了)
5.3.7 事务隔离级别

事务隔离级别设置是在DBMS中执行SET TRANSACTION命令来实现或通过管理工具设置。事务隔离级别设置越高,出现数据不一致的可能性越小,但系统吞吐量也越小。具体选择何种事务隔离等级取决于我们对数据异常的容忍程度
事务隔离级别看起来好像跟锁机制并发控制协议有关系,但是需要注意的是事务隔离级别和锁协议等级相关但是不完全对应——某个事务隔离级别的实现需要对应的锁协议,如可重读读取需要三级加锁协议
5.5 数据库备份与恢复

- 数据库备份方式
- 冷备份:冷备份是指在数据库停止运行时进行备份操作, 可以确保备份的数据完整性和一致性,但会中断数据库的正常服务。
- 热备份:热备份是指在数据库运行时进行备份操作,不会中断数据库的正常运行。热备份通常需要数据库支持相应的备份工具和机制
- 作者:🐟🐟
- 链接:https://www.imyuyu.top//article/DB/Chapter5
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。