SqlServer2008实例17事务控制

    事务是关系型数据库系统不可缺少的一部分,它们用来帮助定义一个工作单元。这样的工作单元能包含一个或多个T-SQL语句,它们以一个整体进行提交或者回滚。这样的“全有全无一功能能防止部分更新或者数据状态不一致。所谓部分更新,是指当一个相关进程只有一部分被回滚或者取消,而其他部分没有回滚或回退时产生的情情况。
    每个事务都具有ACID校验口ACID表示原了性(Atomicity)、一致性(Consistcncy)、隔离性(lsolation)[或者独立性(lndependcnce)]和持久性( Durability)。

  • 原子性意味着事务是一个全有全无的实体——要么完成所有步骤要么什么都没有发生。
  • 一致性确保数据在事务前和事务后都是有效的,必须保持数据完整(例如外键引用)以及内部数据结构处于一个有效的状态。
  • 隔离性是事务不依赖其他并发事务(即使在同一时间或者重叠发生)的必要条件。一个事务不能看到其他处于中间状态的事务的数据,但能看到事务开始前或结束后的数据。
  • 持久性意味着事务提交后事务的效果是永久的,即使系统发生故障修改也会生效。

    自动提交( autocommit)是SQL Scrver默认的行为,每一个独立的T-SQL语句都会在执行完毕后自动提交。例如,如果你有两个INSERT语句,第一个失败了而第二个成功了,第二个的修改还是有效,因为每一个INSERT自动包含在自己的事务中。尽管这种模式能让开发者无需操心显式实现事务,但是对事务性的活动采用这种模式是会产生错误的。例如,你有两个事务,一个为账户还款,而另一个贷款,但是第一个事务失败了,这样你只是贷款而没有还款。遇到这种情况银行可能高兴了,但对于客户来说却未必,账户上莫明其妙多了贷款。自动提交对于特殊的管理变动有点儿危险——例如,如果你不小心删除了表中的所有行,在意识到错误后没有机会回滚事务。
    当下列语句中的一个首先执行的时候.SQL Server会话将自动打开一个新事物,此时隐式(implicit)事务将被启用:ALTER TABLE. FETCH, REVOKE. CREATE、GRANT、SELECT, DELETE、INSERT、TRUNCATE TABLE、DROP、OPEN和UPDATE。
    只要上述任意语句被执行就会自动创建(或打开)一个新的事务,并且该事务会一直保持打开状态,直到遇到ROLLBACK或COMMIT语句。初始化命令已经包含在打开事务的过程中了。在查询会话中执行下面的命令能激活隐式模式
  SELECT IMPLICIT_TRANSACTIONS ON
  要关闭它(回到显式模式)则执行:
  SELECT IMPLICIT_TRANSACTIONS OFF
  隐式模式在正式的应用中会很麻烦,因为应用程序设计师和最终用户可能会忘记提交事务,让它们处于打开的状态,这会阻塞其他连接(本章后面会详细介绍阻塞)。
    显式( explicit)事务是由你自己定义的口当对数据库应用程序进行数据修改操作的时候,显式事务是操作最推荐的模式。这是因为你要显式控制哪些修改属于一个事务以及有错误发生的时候执行什么操作。那些需要分在一组中的修改操作按照你自己的意愿来实现。
    显式事务使用下面的T-SQL命令和关键字,如表所示

                                                                 显式事务命令

BEGIN TRANSACTION

设置一个显式事务的起点

ROLLBACK TRANSACTION

恢复由一个事务修改的原始数据,使数据回到事务开始时的状态。释放由事务占据的资源

COMMIT TRANSACTION

如果没有遇到错误则结束事务并且永久实现修改。释放由事务占据的资源

BEGIN DISTRIBUTED TRANSACTION

允许我们定义一个由微软分布式事务处理协调器(MS DTC)管理的分布式事务的起点。MS DTC必须在本地并且远程运行

SAVE TRANSACTION

SAVE TRANSACTION在事务内部设置一个保存点,允许我们定义一个事务在部分取消后能返回的位置。事务回滚到保存点后必须立即回滚或提交。

@@TRANCOUNT

返回连接的活动事务数量。BEGIN TRANSACTION把@@TRANCOUNT加1,而ROLLBACK TRANSACTION和COMMIT TRNASACTION把@@TRANCOUNT减l。ROLLBACK TRANSACTION到保存点不会影响@@TTRANCOUNT

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ngbshzhn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值