数据库工程师基础学习12----事务处理

1,事务的基本概念
在这里插入图片描述
这里的事务表示一系列的数据库操作,由begin transaction和end transaction包围,数据执行语句之后数据只是会暂时保存在缓冲区等地方,使用commit可以实现永久保存.使用rollback可以实现,回滚撤销操作.
已经用了commit就不能再用rollback进行回滚了.
在这里插入图片描述
在这里插入图片描述
在题目中,如果前面使用的是commit work,后面用到rollback的时候也要加work,题目前后需要保持一致.
在这里插入图片描述
这里与关系型数据库的特点相同.ACID原则,注意,在事务执行过程中,可能会出现短暂的数据不一致.如a-1000后,b还没来得及+1000,但是这里说的一致性是事务结束之后的状态.
持久性,指的是:事务提交之后的数据,应该写在磁盘等永久存储的地方.一旦commit,就要永久保存.

例子答案为:d,c
注意事务是不可分割的.
在这里插入图片描述
在这里插入图片描述
这里注意end 执行之后,程序事务只会进入部分提交状态.需要commit
同理,失败状态,表示遇到了问题,也必须回滚.

2,数据库的并发控制
并发控制,多个事务对同一个数据进行操作.
如不同的乘客,买同一车次的车票.
并发控制很可能会产生一些错误.
在这里插入图片描述
这里只有执行write的操作,数据库中的值才会改变.相当于update操作.
在这里插入图片描述
这就是串行调度的方法.依次按顺序.
在这里插入图片描述
这就是并发操作.
什么是正确的并发调度.就是一种并发调度的结果,与某一串行调度的结果是相同的,就是正确的并发调度.
在这里插入图片描述
注意对于前面的串行调度,其实由两种结果.
所以正确的并行调度,可以有两种结果.
在这里插入图片描述
如上图,错误的并发调度,这里注意,如果用了write就表示更新了数据库的值,但是如果在write前面read就只能得到之前的值.错误的并发调度就犯了这个错误.
首先,读出A=10000,但是没有write语句,之后就是T1读出A也=10000,然后经过操作,写入A=8000,读出B=20000,这时候回到T0,写入A,依然写入A=8000,注意这里的8000,是最开始A=A-2000的8000,因为各个事务互不影响.然后读出B=20000,在T0中写入B=22000,这时候正确的做法应该在T1中read(b),但是T1之前已经read(b)了,所以这里最后的结果就是A=8000,B=22000.
在这里插入图片描述
这里不可恢复的调度是这种情况,T0在写入数据A后,最后回滚了操作,但是T1事务,在回滚之前已经提交了commit,这样就造成了T1读出的A数据是错的.

所以需要规定,在T1读事务T0写的数据时,T0一定要先将其提交.
在这里插入图片描述
串行执行的结果如上图.T1→T2指的是,先执行完T1的所有操作,再执行T2的操作.
第二小问的并发调度顺序,是错误的.b方会漏掉50元所产生的利息.
在这里插入图片描述
首先第一个问题,丢失修改.如上图的情况,两个事务都让A-1,结果应该得到14,但是由于并发得到的结果是15.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里是等价的关系.一个并发执行是正确的等价于:该调度为可串行化的调度等价于:正确调度.
在这里插入图片描述
这里的排它锁,x锁也叫独占锁,如果一个事务对数据施加了x锁,那么这个事务可以对数据进行读和写操作,其他事务不可以对这个数据进行读和写操作.
对于共享锁,如果一个事务对数据施加了s锁,那么这个事务可以对数据进行读操作,但是不能写,不能修改,其他事务也可以对该数据施加s锁,同样只能读,并且事务不能对已加s锁的数据施加x锁.

例子答案为:d,a
在这里插入图片描述
这里的二级三级都是在一级的基础上,进行的.
二级三级起作用的关键是:任何事务都不能对施加s锁的数据进行修改.
在这里插入图片描述
对于两段锁协议,注意是对于同一事务来说,不能申请锁,释放锁后,再申请锁.
特别注意:同一事务可以加多个锁,但是一旦释放一个锁后,就不能再加锁了.

例子中的T1是满足两段锁协议的,T2是就不满足.

黄字部分很重要,它的意思是:如果一个事务遵循两段锁,那么他一定是正确调度,但是如果一个事务不遵循两段锁,那么它的调度可能是正确的,也可能是错误的.
在这里插入图片描述
死锁的意思是:T1,T2两个事务.T1对A数据加了x锁,T2对数据B加了x锁,之后T1需要对数据B加x锁,T2需要对数据A加x锁,这时候会发现,两个事务都无法完成.
在这里插入图片描述
这里需要会拼写.上图非常重要.隔离级别从1-4,逐渐增强.
在这里插入图片描述
幻读的意思是:如搜索男生的数据,得到10条记录,但是在之后,B事务插入两条男生的记录,这时候再去搜索,就出来了12条记录,这种情况叫做幻读.
在这里插入图片描述
这里问题一,A,B两种调度是错误的,产生错误的原因是:发生了丢失修改现象,破坏了事务的独立性.

问题二的(1)正确的准则是:可串行化.用两段锁协议来,保证事务的正确执行.
在这里插入图片描述
问题二的答案如上:我们不能一开始就加slock因为这道题是需要修改数据的,需要满足两段锁协议,所以需要一开始就申请xlock锁.并且注意是要重写,伪代码.

3,数据库备份与恢复
在这里插入图片描述
在这里插入图片描述
事务故障由于事务本身导致.
在这里插入图片描述
断电,电脑损坏是系统故障中的硬件故障.
而介质故障是指磁盘损坏,是物理层的事情.是物理层的数据直接出了问题,才叫介质故障.
在这里插入图片描述

其中数据库镜像,涉及很多复制操作.所以会降低系统的性能.
在这里插入图片描述

这里的撤销事务就是前面提到的,在执行事务的时候发生数据库异常,这种情况下,需要反向执行每一条之前执行过的语句的逆操作,直到遇到开始事务标志.
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这里可以看到,写入数据库与提交事务是不同的,而且提交了事务也需要时间去写入磁盘中.

在这里插入图片描述
答案为:a,b
对于事务故障和系统故障一般采用日志进行恢复.
在这里插入图片描述
在这里插入图片描述
这里问题1答案为:1,50,10
其中,checkpoint就是设置的检查点.在检查点之前,t1,t2,t3都没有提交,所以都处于活动状态.
在检查点之后,t1提交了.所以我们要redot1,undo t2,t3.

4,真题
在这里插入图片描述
答案为:c,a,a,b
其中,第三题.对于事务故障,我们只需要进行undo操作,不需要用日志或备份.
对于系统故障,我们只需要用日志文件.
对于介质故障,我们需要用到备份和日志文件.
在这里插入图片描述
答案为:c,b,a
在这里插入图片描述
答案为:d,d,a,b,c
其中最后一道题,是丢失修改的情况.不是读脏数据,脏数据数据需要是不用的.这里是丢失了T2的数据修改.
在这里插入图片描述
答案为:c,a,d,d,a,c,c,a,a
其中,第三题的第二问,破坏的是隔离性.并且我们提到的丢失修改,幻读,读脏数据都是由破坏隔离性产生的问题.
在这里插入图片描述
答案为:c,b,c,d,c,d,d
这里注意第一题的第二问,不是写入索引文件,而是写入数据文件.
以及第四题的,四种隔离级别.
read uncommitted 什么都解决不了(读未提交)
read committed 可以解决读脏数据.(读已提交)
repeattable read 解决读脏数据和不可重复读(可重复读)
serializable 可解决读脏数据和不可重复读,幻读问题.(可串行化)
在这里插入图片描述
答案为:b,a,b,b,b,d,c
其中第三题的第二小问,如果回滚T1还需要将写入的值,执行反操作.所以代价很大.
第四题,发生系统故障,用日志进行修复.
在这里插入图片描述
答案为:d,a,c,c,a,a,d
其中,注意事务故障由数据库管理系统DBMS自动修复.
并且,这里的丢失修改也没有破坏事务的一致性,因为读出来是多少,结果就是多少.
在这里插入图片描述
答案为:d,c,d,b,c,d,b
其中注意事务的可串行化,保证的是隔离性和一致性.持久性当然不在这里被保证.
并且注意第四题,是非可串行化的调度.因为与任一串行结果都不同.
在这里插入图片描述
答案为:c,c,d,d,c,a
注意,这里第五题选c.注意这里说的是并发控制(两段锁协议等),那些问题是并发操作造成的.
在这里插入图片描述
答案为:b,d,b,a,b,a
在这里插入图片描述
答案为:a,d,b,d,c,a,b
其中最后一道题,一级封锁协议解决的是修改丢失问题.(在修改数据前加x锁)
二级封锁协议解决的是读脏数据的问题.(在一级协议的基础上,读数据前加s锁,读完数据释放s锁)
三级封锁协议解决的是不可重复读的问题.(在一级协议的基础上,读数据前加s锁,事务结束后释放s锁)
在这里插入图片描述
答案为:d,d,b,c,b,a
在这里插入图片描述
答案为:c,d,b,a,c,d
其中,第三题,数据库事务可以隐式地定义.如一条语句地执行,其实就是隐式地创建了一个事务.
并且注意commit和rollback都代表事务地结束.

最后一道题的最后一小问,这样的调度是可能产生死锁情况的.并且题目中的并行流程就是个死锁.
在这里插入图片描述
答案为:c,a,b,a,d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值