【机房重构个人版】存储过程+事务回滚

一、存储过程:

    关于存储过程的介绍已经在之前的博客中总结过了,预知详情,猛戳这里

二、数据库事务:

    事务(Transaction)是构成单一逻辑工作单元的操作集合,要么完整地执行,要么不执行。事务是数据库环境中一个逻辑工作单元,相当于操作系统中“进程”的概念。一个事务由应用程序中的一组操作序列组成,在程序中,事务以BEGIN   TRANSACTION语句开始,以COMMIT语句或ROLLBACK语句结束。

    COMMiT语句表示事务执行成功结束,该事务对数据库的所有更新都已写入磁盘。ROLLBACK语句表示事务执行不成功地结束(回滚),该事务对数据库的所有更新必须被撤销,数据库应恢复该事务到初始状态。

1、事务的ACID性质:

①原子性(Atomicity):要么都执行,要么不执行,不可分割。

②一致性(Consistency):事务完成后,必须使所有的数据保持一致的状态。

③隔离性(Isolation):当多个事务并发执行时,系统应保证与这些事务先后单独执行的结果一样。也就是说,几个事务并发执行,彼此之间没有影响。相互隔离。

④持久性(Durability):事务完成之后,对于系统的影响是持久性的,不会丢失,即使以后系统发生故障,也是如此。

2、事务的优点:

①可以简化错误恢复,并使应用程序更加可靠。

②特别是涉及银行交易时,利用事务保证了交易的平稳性和可预测性。


三、在机房重构中的应用:

1、简单梳理:

    以注册为例,当我注册的时候,需要完成一系列相关的工作。①把与卡号有关的信息插入到卡表(T_Card)中。②把与学生有关的信息插入到学生表(T_Student)中。③把注册金额插入到充值记录表(T_Recharge)中。将这一系列操作看成一个存储过程,要么全部执行,要么不执行。

2、存储过程+事务回滚的代码展示:

<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">ALTER PROCEDURE [dbo].[PROC_Register] 
	
	@CardNo char(10), @StudentNo char(10), @Studentname ntext,@sex nchar(10),@Department nchar(10),@Grade nchar(10),@Major nchar(10),@Class nchar(10),  
	@Cash decimal(18,2),@Type char(8),@status char(16),@Explain char(50),@Head nchar(10),@CheckStatus char(16),@Date date,@Time time,
	@RechargeMoney decimal(10,4),@RechargeDate date,@RechargeTime time
	
AS
BEGIN
--开始一个事务
 begin transaction

	-- 添加卡表
	insert into T_Card(StudentNo,CardNo,Cash,Head,Type,Status,CheckStatus,Date,Time)values(@StudentNo,@CardNo,@Cash,@Head,@Type,@status,@checkStatus,@Date,@Time)
	-- 添加学生表
	insert into T_Student(StudentNo,StudentName,Sex,Department,Grade,Major,Class,Explain,Date,Time)values(@StudentNo,@StudentName,@sex,@Department,@Grade,@Major,@Class,@Explain,@Date,@Time)
	-- 添加到充值记录表
	insert into T_Recharge(CardNo,RechargeMoney,RechargeTime,RechargeDate,Head,CheckStatus)values(@CardNo,@RechargeMoney,@RechargeTime,@RechargeDate,@Head,@CheckStatus)
--如果数据操作无误
  if @@error=0
  --事务提交语句
  commit   transaction
  else
  --事务回滚语句
  rollback transaction 

END</span></span>

四、总结:

    刚开始使用存储过程的时候,各种出错,各种不适应,并且也没有考虑事务回滚的问题,直到今天才想着把它完善起来。不得不说,存储过程的功能真的很强大!顺便分享一篇介绍存储过程和事务回滚的博客。猛戳这里

    从开始的畏惧到现在的熟悉,这是一个过程。我们要本着盲人摸象的精神,不是因为会了才去做。而是因为做了才会。加油~~~

      

        

         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值