码迷,mamicode.com
首页 > 数据库 > 详细

数据库事务书写简单DEMO(新手见解)

时间:2016-07-01 10:16:22      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:

  因为最近在做项目时多次应用到了事务,在这里简单举一个数据库事务的DEMO ,希望大家批评指正,谢谢!

  那么,废话不多说,我们开始先从事务的介绍以及一系列知识点说起:

  

  事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

  例如,银行转账工作:从一个账号扣款并使另一个账  号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

       针对上面的描述可以看出,事务的提出主要是为了解决并发情况下保持数据一致性的问题。

       事务具有以下4个基本特征。

  ●   Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。

  ●   Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。

  ●   Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。

  ●   Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。

 

  2.事务的语句  

  开始事物:begin  transaction        

  提交事物:commit  transaction         

  回滚事务:rollback  transaction       

    3.事务的4个属性     

  ①原子性(Atomicity):事务中的所有元素作为一个整体提交或回滚,事务的个元素是不可分的,事务是一个完整操作。   

  ②一致性(Consistemcy):事物完成时,数据必须是一致的,也就是说,和事物开始之前,数据存储中的数据处于一致状态。保证数据的无损。   

  ③隔离性(Isolation):对数据进行修改的多个事务是彼此隔离的。这表明事务必须是独立的,不应该以任何方式以来于或影响其他事务。   

  ④持久性(Durability):事务完成之后,它对于系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库

  4.事务的保存点     

  save   transaction        保存点名称 --自定义保存点的名称和位置     

  rollback  transaction        保存点名称 --回滚到自定义的保存点

 

  如果这样还不了解,直接上个有关于充值的DEMO:

 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  USE [MoneyProduct]
  GO
  /****** Object:  StoredProcedure [dbo].[Pro_InsertMoneyRecordes]    Script Date: 07/01/2016 09:32:31 ******/
  SET ANSI_NULLS ON
  GO
  SET QUOTED_IDENTIFIER ON
  GO
  ALTER proc [dbo].[Pro_InsertMoneyRecordes] --一个存储过程,这个没什么说的
  @U_Id int,@MR_money decimal,@MR_time datetime,@MR_state int,@MR_depict varchar(100),@MR_typeId int,@MR_numbers varchar(100) ,@Bid int,@Cy_Id int ,@Cy_numbers varchar   (100)
  as
  begin
 
    begin tran Tran_Money --开始事务
    DECLARE @tran_error int ;
      set @tran_error =0;
      begin try
       insert into MoneyRecord values(@U_Id,@MR_money,@MR_time,@MR_state ,cast (@MR_depict as varchar),@MR_typeId,@MR_numbers,@Bid,@Cy_Id,cast (@Cy_numbers as varchar));

    --添加充值信息
     set @tran_error =@tran_error+@@ERROR;
     --测试出错代码,看看充值数据是否添加成功
      --SET @tran_error = 1;
       select @@IDENTITY as ‘identity‘;--查询新添数据最后一行的标识列
       set @tran_error = @tran_error+@@ERROR;
       insert into CZRecord values(@@IDENTITY);--向充值记录里添加一条信息
      set @tran_error = @tran_error+@@ERROR;
      update Capital set C_balance=C_balance+@MR_money where C_Id = (select C_Id from UserInfo where U_Id =@U_Id)--修改账户中心余额
      set @tran_error = @tran_error+@@ERROR;
      end try
   begin catch
      print ‘出现异常‘+convert(varchar,error_number())+‘,错误信息‘+error_message()
      set @tran_error=@tran_error+1;
   end catch
if(@tran_error>0)
   begin
     --执行出错,回滚事务
     ROLLBACK TRAN;
     Print ‘充值失败‘
     end
else
  begin
    --没有异常,提交事务
    COMMIT TRAN;
    Print ‘充值成功‘
    end
end

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以上只是自己对于事务书写规范的认识,可能不够全面严谨,希望各位指教!

 

  

数据库事务书写简单DEMO(新手见解)

标签:

原文地址:http://www.cnblogs.com/wyf0704/p/Willians.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!