您的位置:首页 > 其它

"事务"原来是这么回事

2013-07-28 08:48 232 查看
合作机房收费系统时在实现充值功能的时候我们选择了使用存储过程,因为这个功能需要对两个表进行更新,其实不用存储过程也无所谓,两个表不能算多,这里我们主要还是为了练而用.在写存储过程时小高(我们组的伙伴)说其它组还加入了 事务,问我们用不用,说实话"事务"用在数据库中对我来说还真是个生词,脑子中压根就没有这个东西,小张(我们组的成员)随口提了一句事务是……,没能明白,接下来上网查了一下,明白了事务到底是干什么,怎么使用事务



用我自己的话说,事务是用来维护数据的,下面我就用我们的例子解释一下:



实现充值金额时我们需要将(T_Card)卡表和(T_Chargelog)充值记录表进行更新,也就是说充值了多少钱我要更新充值记录表中,这时卡表中的余额字段也要同时更新,运行事务就是可以包着那个这两个更新操作“同时得到执行”或“同时未得到执行”,避免由于某种原因导致一个表更新,而另一个没有,为了保证对数据库操作的完整性,解释到这,您理解了吗?



如果您还是不太明白,那别着急,我对事务进行一个详细的解释



1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。他包含的所有数据库操作命令作为一个整体一起向系提交或撤消,这一组数据库操作命令要么都执行,要么都不执行。


2.事务的语句

开始事物:begin transaction

提交事物:commit transaction

回滚事务:rollback transaction


3.事务的4个特性

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

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

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

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


4.事务的分类
按事务的启动与执行方式,可以将事务分为3类:
①显示事务 :也称之为用户定义或用户指定的事务,即可以显式地定义启动和结束的事务。分布式事务属于显示事务
②自动提交事务:默认事务管理模式。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。
③隐性事务:当连接以此模式进行操作时,sql将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始,只需提交或回滚每个事务。它生成连续的事务链。

5.实例
BEGIN transaction
    
    declare @errorSum int --定义错误计数器
    set @errorSum =0 --没错的为0
    

	update T_Chargelog set ChargeCash=@ChargeCash ,ChargeDate= @ChargeDate,ChargeTime=@ChargeTime,Admin=@Admin,IsChecked='未结账' where CardID=@CardID --sql语句
	set @errorSum =@errorSum +@@ERROR  --累计是否有错误
	
	update T_Card set Balance= @ChargeCash+ Balance  where CardID=@CardID  --sql语句
	set @errorSum =@errorSum +@@ERROR  --累计是否有错误
if @errorSum <>0 
	begin 
		print'有错误,回滚'
		rollback transaction --事务回滚语句
        end 

else
	begin
		print '充值成功'
		commit transaction --事物提交语句
        END



6、不能用于事务的操作

创建数据库 create database
修改数据库 alter database
删除数据库 drop database
恢复数据库 restore database
加载数据库 load database
备份日志文件 backup log
恢复日志文件 restore log
更新统计数据 update statitics
授权操作 grant
复制事务日志 dump tran
磁盘初始化 disk init
更新使用sp_configure后的系统配置 reconfigure


说了这么多,对事务是不是有了更清楚的理解呢,光说不练别说一点用没有,相信还是有很大的差距的,试一试其实挺简单,加油!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐