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

MSSQl 事务的使用

时间:2015-05-06 12:58:57      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

      注册了博客这么久没还好好写过文章呢?昨天看了我同学的博客,写的很好,每次用到以前的知识我就会去看看她写的博客,现在我也工作了,就来记录一下我现在用的知识吧,也方便我以后查阅。

那么我就先来介绍一下事务吧! 事务具有以下四个特性:

1.原子性

   事务的原子性是指事务中包含的所有操作要么全做,要么全不做。

2.一致性

   在事务开始以前,数据库处于一致性的状态,事务结束后,数据库也必须处于一致性状态。

3.隔离性

    一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

4.持久性

   一个事务一旦成功完成,它对数据库的改变必须是永久的,即便是在系统遇到故障的情况下也不会丢失。数据的重要性决定了事务持久性的重要性。

      事务最大的一个特点就是可以回滚,回滚就是回到执行操作之前的状态,只要有一个操作失败,那么事务就会回滚到操作之前的状态,例如银行转账,比如A账号给B账户转账10000元,由于计算机可能会因为停电、网络中断等原因而出现故障,所以有可能只更新B账户的金额,B账号金额多了10000块钱,而A账号金额没有减少,那银行不是亏大了吗?这时候事务的作用就体现出来了,事务可以帮助这个操作回滚到转账以前的状态,A账户金额没有减少,B账号金额也没有增多。

    下面粘一个,我近期写的一个事务吧!

create proc [dbo].[shenqing_zuof]
@i_id int,
@ReTurnValue int OUTPUT --输出参数,也就是返回值
as
declare @shijinum int,@productid int,@cangkuid int
select @shijinum=s_shijinum ,@productid=i_productid, @cangkuid=i_cangkuid from shenqing  where i_id=@i_id
begin tran  --标记事务的开始
begin 
	update shenqing set i_static=4,i_paifa=1 where i_id = @i_id
	if @@Rowcount<1
	goto Error1
	update Kucun set i_fuzhunum=i_fuzhunum+@shijinum where i_cangkuid=@cangkuid and i_productid=@productid
	if @@ROWCOUNT<1
	goto Error2
end
commit tran   --提交事务
set @ReTurnValue=1  --正确执行
return
 
Error1:
rollback
set @ReTurnValue=-1  --更新申请状态失败
return

Error2:
rollback
set @ReTurnValue=-2  --更新辅助库存失败
return

       我用到的有输出参数output,用来返回操作状态,@@Rowcount是全局变量,返回受影响的行数。当@@Rowcount<1时代表更新语句执行失败,如果失败则跳转到Error,事务回滚到操作之前的状态,并返回对应的返回值。 一般把DML语句 (select,delete,update,insert语句)放在begin tran...commit tran 之间作为一个事务处理,也就是那些语句执行过程中如果遇到错误,无论哪句遇到错误,所有语句都会回滚到BEGIN TRAN之前的状态。 

MSSQl 事务的使用

标签:

原文地址:http://www.cnblogs.com/zhangjd/p/4481475.html

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