SQL 进阶学习之七



--  =========================================================================================
--
 2007/06/06 SQL学习-- 事务
--
 =========================================================================================
use  test
go

--
--
 ******************************************************************************************
--
 ===================================================================================================
--
 事务与锁
--
 事务(Transaction)的作用是保证一系列的数据操作可以全部正确完成,不会造成数据操作到一半未完成,
--
 而导致数据的完整性出错。
--
 锁(Lock)的作用是保证数据在操作的过程中不会受到任何的其他影响。
--
 ===================================================================================================
--
 事务是作为单个逻辑工作单元执行的一系列工作。必须具备的四个特性:
--
 1)原子性
--
 2)一致性
--
 3)隔离性:由并发事务所作的修改必须与其他并发事务所作的修改隔离。
--
 4)持久性:在事务完成后,其操作结果对于系统的影响应该是永久的。

--  
--
 ===================================================================================================
select   *   from  authers
select   *   from  books

delete  authers 
where  author_id  =   4

delete  books 
where  book_id  =   8
--
--
 开始事务
begin   tran
declare   @bid   int
--  添加一本书
insert  books
values ( 8 , ' ADO.NET ' , 4 , 300 )
if   @@error   >   0
goto  tranrollback
set   @bid   =   @@identity
--  添加一个作者
insert  authers
(author_id,lastname,firstname,company)
values ( 4 , ' bin ' , ' song ' , ' 21CNIT ' )
-- print '添加成功 !'
if   @@error   >   0
goto  tranrollback
--
tranrollback:
if   @@error   >   0   or   @@rowcount   <>   1
    
rollback   tran   --  如果发生错误则回滚事务
else
    
commit   tran   --  如果没有发生错误则提交事务
go



--
--
 事务的执行方式分为三种:
--
 1)显式事务
--
 2)自动提交事务(默认的方式)
--
  每一个T-SQL语句都是一个自动提交的事务
--
 3)隐式事务
--
  当执行 set implicit_transactions on 语句后,进入隐式模式
--
  隐式事务产生的是一个连续的事务链

--  =================================================================================================
--
 编写事务的原则:
--
 1)事务要尽可能简短
--
 2)在事务中访问的数据量要尽量最少
--
 3)浏览数据时尽量不要打开事务 
--
 4)在事务处理期间尽量不要请求用户输入


--  编写事务
--
select   *   from  books
--  事务开始
begin   tran
--  
insert  books
(book_id,title)
values ( 10 , ' wo ' )
if   @@error   >   0   or   @@rowcount   <>   1
goto  tranrollback
--
insert  books
(book_id,title)
values ( 11 , ' me ' )
if   @@error   >   0   or   @@rowcount   <>   1
goto  tranrollback
--
select   *   from  books
--
delete  books
where  book_id  =   15
if   @@error   >   0   or   @@rowcount   <>   1
begin
    tranrollback:
    
rollback   tran       --  回滚事务
end
else
    
commit   tran
--  事务结束
--
 查看事务结束后的数据集
select   *   from  books




--  嵌套事务
--
 嵌套事务里并不是将嵌套的语句完全执行完毕,嵌套事务会将内层事务的commit语句忽略,只提交最外层事务的commit语句
--
 在内层事务里,rollback语句仍然有效,但只是回滚到外层事务开始之前的状态
--
begin   tran
print   '
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值