首页 > 代码库 > 数据库事务简介与实例

数据库事务简介与实例

什么是数据库事务?
数据库事务是指作为单个逻辑工作单元执行的一系列操作。具体表现为:可以将几个sql语句作为一个整体来执行,这些sql语句当有一条执行出错时,那么所有的sql语句都将执行失败。也就是这些sql语句作为一个整体,要么全部执行成功,要么全部执行失败。使用事务能便于恢复数据,保证数据的一致性。

一 事务的属性
事务具有ACID属性
即 Atomic原子性, Consistent一致性, Isolated隔离性, Durable永久性

原子性

就是事务应作为一个工作单元,事务处理完成,所有的工作要么都在数据库中保存下来,要么完全回滚,全部不保留

一致性
事务完成或者撤销后,都应该处于一致的状态。

隔离性

多个事务同时进行,它们之间应该互不干扰。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

永久性
事务提交以后,所做的工作就被永久的保存下来

事务实例:

create procedure TransferMoeny
(
    
@FromAccountNo varchar(50),-- 转出账号
    @ToAccountNo varchar(50),--转入账号
    @MoneyCount money--转账金额
)
as
--判断账号是否存在
if exists (select 1 from 帐户表 where 账号 = @FromAccountNo
begin
    
if exists (select 1 from 帐户表 where 账号 = @ToAccountNo
    
begin
        
--判断转出金额是否大于当前余额
        if (select 当前余额 from 帐户表 where 账号 = @FromAccountNo>= @MoneyCount
        
begin
            
--开始转账
            begin transaction
            
insert into [存取记录表] ([账号],[存取类型][存取金额]values(@FromAccountNo-1,@MoneyCount)
            
if @@error <> 0
            
begin
                
rollback transaction--发生错误则回滚事务,无条件退出l
                return
            
end
                       
insert into [存取记录表] ([账号],[存取类型][存取金额]values(@ToAccountNo1,@MoneyCount)
            
if @@error <> 0
            
begin
                
rollback tran
                
return
            
end
            
commit transaction --两条语句都完成,提交事务
        end
        
else    
            
raiserror (转账金额不能大于该账号的余额,16,1)
    
end
    
else
    
raiserror (转入账号不存在,16,1)

end
else
    
raiserror (转出账号不存在,16,1)

数据库事务简介与实例