Sql server中的事务1

一、事务
定义:1.一个数据库操作序列
2.一个不可分割的工作单位
3.恢复和并发控制的基本单位
例如:
在银行活动中,“由账户A转移资金额X到账户B”是一个典型的银行数据库业务。这个业务可以分解为两个动作:
1)从账户A中减掉金额X
2)在账户B中加入金额X
这两个动作应当构成一个不可分割的整体,要么完成其中的所有动作,要么不执行其中任何动作,二者必居其一。这两个动作就是一种“不可分割”的业务单位 。一旦某个环节失败,就需要回滚(恢复到初始状态)

事务的ACID特性:
1)原子性(Atomicity):事务是一个完整的操作,事务的各步操作是不可分的(原子的);要么都执行,要么都不执行
2)一致性(Consistency):当事务完成时,数据必须处于一致转态
3) 隔离性(Isolation):张三和李四之间的转账与王五和赵二之间的转账,永远是相互独立的。(并发事务之间相互独立)
4)持续性(Durability ):事务完成后,它对数据库的修改被永久保存。

在SQL Server中数据库分三种:
自动提交事务:这是 SQL Server 的默认模式,它将每条单独的 T-SQL 语句视为一个事务,如果成功执行,则自动提交;如果错误,则自动回滚。
如:Update student setSname=‘李明’,sno = ‘00002’ where sno = ‘00001’一旦执行失败,自动回滚

显示事务:用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
所谓事务存储点就是在事务过程当中插入若干个标记,当事务执行中出现错误时,可以不撤销整个事务,只是撤销部分事务,将事务退回到某个事物存储点。一旦事务提交或回滚,则事务结束。
例如:


begin   tran  ok  --开始一个事务 OK 
 delete  from  rxqz  where qz=   'rx015 ' --删除数据  
save tran  bcd   --保存一个事务点 命名为 bcd
 update  sz  set   name='李丽s' where name= '李丽'--修改数据
if  @@error=0  --判断修改数据有没有出错    
begin --如果出错   
 rollback   tran  bcd  -- 回滚事务到 BCD 的还原点
commit   tran  ok  --提交事务 
end   
else  --出错 
commit  tran ok --提交事务   


/*

 创建一个事务,把学号为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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值