引言
1 事务 :
用户定义的一个数据库操作序列,这些操作是要么不做,要么全做,是一个不可分割的工作单位。
begin transaction
commit % 提交
rollback % 回滚事务
2 由定义可知,事务是具有原子性的。同时也具有一致性,这个性质与原子性有关。举个例子 。
create procedure pro_tran
@incount int ,@outcount int ,@amount float
as
begin transaction trans
declare
@totaldepostionout float,
@totalDepositionin float,
@inaccounttion int ;
select @totaldepostionout =total from account where accountnum=@outcount;
if @totaldepostionout is null
begin
print'转出账户不再';
rollback transaction trans;
return ;
end;
select @inaccounttion =accountnum from account where accountnum =@inaccounttion;
if @inaccounttion is null
begin
print'转入账户不存在'
rollback transaction trans
return
end;
begin
update account set total=total -@amount where accountnum =@outcount;
update account set total =total +@amount where accountnum =@incount;
print '请取走银行卡'
commit transaction trans
return
end
账户a向账户b 转账,可以分为两个部分,一个是从账户a 取,第二个是账户b存,这两个过程如果只是做一个的话,数据库将会处于一种不正确的状态,不一致性。
3.还具有 隔离性,持续性
习题
P305
4
(1) T 1 , T 3 是 c o m m i t T_1,T_3是commit T1,T3是commit 状态, T 2 T_2 T2处于rollback, T 4 T_4 T4 没有commit ,因此 T 1 , T 3 T_1,T_3 T1,T3 重做, T 4 T_4 T4撤销
(2) T 1 T_1 T1处于commit 应重做, T 3 T_3 T3没有结束应该撤销, T 2 T_2 T2 处于rollback状态,相当于没有这个事务。
(3) T 1 T_1 T1重做, T 2 , T 3 T_2,T_3 T2,T3撤销
(4) T 1 T_1 T1 重写, T 2 T_2 T2rollback
5
(1)根据4(1)a=8,b=7,c=11
(2)只有 T 1 T_1 T1重做 即a=10,b=0,c=11
(3)只有 T 1 T_1 T1重做 ,a=10,b=0,c=11
(4) 同(2) (3)
(5)a=10,b=0,c=11
(6) 没有重做的事务 因此a=0,b=0,c=0
总结
在实际的应用中数据库的恢复技术既十分重要的,要对事务故障,系统故障,以及介质故障进行恢复。数据转储和登记日志文件是常用的手段,基本原理是利用存储在后备副本,日志文件以及数据库镜像中的冗余数据重建数据库。