什么是数据库事务?
数据库事务是指作为单个逻辑工作单元执行的一系列操作。具体表现为:可以将几个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(@ToAccountNo, 1,@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)