SQL事务-解析

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

      事物的四个属性(ACID):

      ①原子性(Atomicity):事务中的所有元素作为一个整体提交或回滚,事务的元素是不可分的,事务是一个完整操作。
      ②一致性(Consistemcy):事物完成时,数据必须是一致的,也就是说,和事物开始之前,数据存储中的数据处于一致状态。保证数据的无损。
      ③隔离性(Isolation):对数据进行修改的多个事务是彼此隔离的。这表明事务必须是独立的,不应该以任何方式影响其他事务。

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

     事务的主要的控制语句:
     BEGIN TRANSACTION:开始事务
     COMMIT TRANSACTION:提交,也就是事务的结束
     ROLLBACK TRANSACTION:如果事务没有全部完成,回滚到初始值或者保存点。
     SAVE TRANSACTION:设置保存点,允许部分的提交事务。

      以上是事务的一些基本概念,涉及到多表操作的时候保证一个过程都顺利的执行,经常用到事务。在SQL中事务就是一个存储过程,注意一些语法即可。

      实例运用:事务的调用方法和存储过程一样。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Jesse>
-- Create date: <2012年8月11日, PM 09:11:50>
-- Description:	<退卡操作事务:用户信息基本表中的记录删除之后在退卡信息表添加一条记录>
-- =============================================
CREATE PROCEDURE <ReturnCard> 
	@cardno varchar(18)     --传入参数卡号
	@c_operator varchar(10) --传入操作员名称
AS
BEGIN
	declare @CancelCash decimal(18,2),@Err1 int,@Err2 int   --定义变量
	SELECT @cancelcash=select balance from D_sqlStudentInfo where carno=@cardno  --给变量赋值
	BEGIN TRANSACTION		--开始事务
	Delete from D_sqlStudentInfo where carno=@cardno		---删除用户记录语句
	Set @Err1=@@Error			--如果出错就会给变量赋值,变量不为0
	insert D_CancelCard (cardno,cancelCash,c_datetime,c_operator) 
		values (@cardno,@cancelCash,getdate(),@c_operator) ---插入数据语句
	Set @Err2=@@Error			--如果出错就会给变量赋值,变量不为0
	IF @Err1=0 AND @Err2=0			--如果都为0,表示没有出错
		COMMIT TRANSACTION		--提交,完成事务
	ELSE
		ROLLBACK TRANSACTION		--出错,事务回滚,恢复到初始状态,没有任何改动

END
GO




猜你喜欢

转载自hongqiang.iteye.com/blog/1629278