> 数据库 > SQL Server 2008 >

SQL Server中的事务(附有实例)

一、事务
 
     定义:
 
    
 
    例如:
 
       在银行活动中,“由账户A转移资金额X到账户B”是一个典型的银行数据库业 
 
       务。这个业务可以分解为两个动作:
 
         1)从账户A中减掉金额X
 
         2)在账户B中加入金额X
 
 
       这两个动作应当构成一个不可分割的整体,要么完成其中的所有动作,要么不执
 
       行其中任何动作,二者必居其一。这两个动作就是一种“不可分割”的业务单   
 
       位 。一旦某个环节失败,就需要回滚(恢复到初始状态)
 
 
 
事务的ACID特性:
 
      1) 原子性(Atomicity)
 
      2)一致性(Consistency)
 
      3) 隔离性(Isolation)
 
      4)持续性(Durability )
 
 
 
在SQL Server中数据库分三种:
 
     自动提交事务:这是 SQL Server 的默认模式,它将每条单独的 T-SQL 语句视为
 
一个事务,如果成功执行,则自动提交;如果错误,则自动回滚。
 
   如:
 
 
 
一旦执行失败,自动回滚
 
 
 
 
 
显示事务:用BEGIN TRANSACTION明确指定事务的开始,这是最常用的事务类
 
型。
 
隐性事务:通过设置SET IMPLICIT_TRANSACTIONS  ON 语句,将隐性事务模式设
 
置为打开,下一个语句自动启动一个新事务(不需要BEGIN TRANSACTION),每
 
个事务仍以COMMIT或ROLLBACK语句显式完成。再下一个 Transact-SQL 语句又将
 
启动一个新事务。
 
       通过SET IMPLICIT_TRANSACTIONS OFF把隐性事务模式关闭。 (隐形事务会占
 
用大量资源,一般都不推荐使用)
 
 
 
T-SQL使用下列语句来管理事务:
 
开始事务:BEGIN TRANSACTION
提交事务:COMMIT TRANSACTION
回滚(撤销)事务:ROLLBACK TRANSACTION
存储点语句:SAVE TRANSACTION
所谓事务存储点就是在事务过程当中插入若干个标记,当事务执行中出现错误时,可
 
以不撤销整个事务,只是撤销部分事务,将事务退回到某个事物存储点。一旦事务提
 
交或回滚,则事务结束。
 
 
 
例如:
 
/*
 
 创建一个事务,把学号为00015的选修课程号003改为001、选修课程号004改为
 
006,以上两个操作任意一个操作失败,事务回滚,查看事务执行结果。
 
*/
 
begin transaction t1_student
update sc
set CNo='001'
where SNo='00015' and CNo='003'
update sc
set CNo='006'
where SNo='00015' and CNo='004'
if @@ERROR!=0
   rollback transaction
   else
commit transaction t_student
/*创建一个事务,把学号为00015的的选修课程号003改为001、选修课程号004改为
 
006,第一个操作失败,事务回滚,成功则设定为保存点,第二个操作失败,则事务
 
回滚,查看事务执行结果。*/
 
begin transaction t_student
update sc
set CNo='001'
where SNo='00015' and CNo='003'
if @@ERROR!=0
   rollback transaction
save transaction t_student
update sc
set CNo='006'
where SNo='00015' and CNo='004'
if @@ERROR!=0
   rollback transaction  t_student
   else
commit transaction t_student
 
/*
启动隐式事务,更新成绩后跟新课程号,然后关闭隐式事务
 
*/
set implicit_transactions on use SM
UPDATE SC
SET Score=score+1
WHERE SNO='00001' AND CNO='001'
UPDATE SC
SET CNO='008'
WHERE SNO='00001' AND CNO='001'
commit transaction
set implicit_transactions off
 
 


(责任编辑:IT)