存储过程+简单事务实现用户的注册操作
这次在机房收费系统合作中,用到了存储过程和事务处理,看似复杂的代码,其实背后有它不为人知的秘密,那就是更加简便的应用。下面我会根据自己的理解来谈论一下关于存储过程+事务是如何实现注册操作的。
事务的概念
那么,什么是事务呢?首先,让我们来了解一下事务的概念:事务是一种机制、一种操作序列,它包含了一组数据库操作命令作为一个整体一起向系统提交或撤消,这组命令要么全部执行,要么全部不执行。事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。事务这种机制适用于多用户操作的数据通信系统,比如:订票系统、银行系统、保险公司系统等。
事务的属性
USE [Systemdb]GO/****** Object: StoredProcedure [dbo].[PROREGIST] Script Date: 08/12/2012 11:06:40 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =======================================================================================================================-- Author:****-- Create date: 2012/8/12,10:11-- Description:注册操作的存储过程,添加事务的处理过程,涉及到两个表,分别是:T_StudentInfo,T_RechargeInfo-- =======================================================================================================================ALTER PROCEDURE [dbo].[PROREGIST]-- 添加参数@cardNoVARCHAR(20),--传入卡号@studentIDVARCHAR(20),--传入学号@studentNameVARCHAR(20),--传入姓名@cardBalanceDECIMAL(18,2),--传入余额@studentGenderVARCHAR(10),--传入性别@studentSubjectVARCHAR(50),--传入院系@studentGradeVARCHAR(20),--传入年级@studentClassVARCHAR(20),--传入班级@studentNoteVARCHAR(50),--传入注释@registAdminVARCHAR(10)--传入管理员ASBEGINDECLARE @Err1INT,@Err2INT--定义错误计数器BEGIN TRANSACTION-- 开始事务--插入学生信息到学生表INSERT INTO T_StudentInfo (card_No,student_ID,student_Name,[card_Balance],student_Gender,student_Subject,student_Grade,student_Class,student_Note,regist_Administrator,regist_DateTime,if_Check)VALUES(@cardNo,@studentID,@studentName,@cardBalance,@studentGender,@studentSubject,@studentGrade,@studentClass,@studentNote,@registAdmin,GETDATE(),0)SET @Err1 = @@ERROR --出错给错误计数器赋值,变量不为0.--插入充值记录到充值表INSERT INTO T_RechargeInfo (card_No,recharge_Cash,recharge_Administrator,recharge_DateTime,if_Check)VALUES(@cardNo,@cardBalance,@registAdmin,GETDATE(),0)SET @Err2 =@@ERROR --出错给错误计数器赋值,变量不为0.IF @Err1 =0 AND @Err2 = 0--判断错误计数器中的值是否为0COMMIT TRANSACTION--提交事务ELSEROLLBACK TRANSACTION--出错,事务回滚,恢复到初始状态,没有任何改动END结束语 利用存储过程+简单事务,来处理注册中对两个表的操作,如果任何一个操作出现问题,事务都会回滚到,恢复到初始状态,如果操作成功,则直接进行提交事务。这样就避免了只对其中一个表进行更新,而对另外一个表没有任何操作,在后续的查询、更新、删除时就不会出现不必要的错误了。 上面简单的谈了一下事务的处理,仅限个人的理解,如有错误的观点,还请各位大虾指出。