事务机制:

1.四个属性

原子性Atomicity,一致性Consistency,隔离性Isolation,持久性Durability ,即ACID特性。

2.事务的状态

活动状态(初始状态),
部分提交状态(事务执行完最后一条语句,实际输出可能临时驻留在内存中),
提交状态(当数据库系统将事务中对数据的梗概完全写入磁盘时,写入事务日子一条信息),
失败状态(事务不能正常执行,回滚),
终止状态(事务已回滚并且数据库已被恢复到事务开始执行前的状态)。

3.事务与日志文件

日志文件是一个纪录数据库最新历史的文件,SQL Server会在系统恢复时使用日志文件(*.LDF)。
三个重要的名词:ROLLBACK,SAVEPOINT,COMMIT。

ROLLBACK是当系统发生错误的时候,将部分完成的事务解除作用的功能够呢,它可以将一个事务恢复到某个SAVEPOINT或者十五开始时的状态。

SAVEPOINT是一个位置定义器,我们可以在一个十五内定义SAVEPOINT,当系统发生错误是将事务恢复至某个SAVEPOINT。

COMMIT是一个保存动作,它会将事务内所有对数据库的更新保存到磁盘上。COMMIT可以保证所有的改变将成为数据库的永久的一部分,而且会释放事务所使用的资源,例如:锁定机制(Lock)。

4.事务的定义

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。
通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。
在sql server+ .net 开发环境下,有两种方法能够完成事务的操作,保持数据库的数据完整性;
一个就是用sql存储过程,另一个就是在ADO.NET中一种简单的事务处理;
现在通过一个典型的银行转账的例子来说明一下这两个例子的用法
我们先来看看sql存储过程是如何来完成事务的操作的:

5.创建数据表;ID表示账户,Moneys表示账户余额

Create table USERMONEY(
ID INT NOT NULL PRIMARY KEY,
MONEYS MONEY
)

INSERT INTO USERMONEY VALUES(1,2000)
INSERT INTO USERMONEY VALUES(2,2000)

6.创建存储过程用来转钱

CREATE PROCEDURE COMMONEY
@tOID INT ,
@fromID INT,
@moneys MONEY,
@rel BIT OUTPUT
AS
BEGIN TRAN --开始事务

--执行第一个操作,转账出钱,减去转出的金额
UPDATE USERMONEY SET MONEYS=MONEYS-@moneys WHERE ID =@fromID
--执行第二个操作,转账入账,加上转入的金额
UPDATE USERMONEY SET MONEYS=MONEYS+@moneys WHERE ID=@tOID

--判断如果两条语句有任何一条出现错误
IF @@ERROR<>0
--开始执行事务回滚,恢复到转账开始之前的状态
BEGIN ROLLBACK TRAN

SET @REL= 0
END
ELSE
--如果两句都执行成功,执行执行事务
BEGIN COMMIT TRAN
SET @REL= 1
END

7.执行存储过程

DECLARE @REL BIT
EXEC COMMONEY 2,1,500, @REL OUTPUT
SELECT @REL