事务具有以下四个特性:
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之前的状态。