引言
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
总结
在实际的应用中数据库的恢复技术既十分重要的,要对事务故障,系统故障,以及介质故障进行恢复。数据转储和登记日志文件是常用的手段,基本原理是利用存储在后备副本,日志文件以及数据库镜像中的冗余数据重建数据库。