SQL Server Transaction

 

http://blog.sina.com.cn/s/blog_60a469490100lwim.html

事务的定义:作为一个逻辑单元进行操作的一系列动作。

Sequence of operations performaed as a single unit work.

事务的四个特性:ACID

原子性 - 事务中的所有动作作为一个单元来执行,要么全部执行,要么全部不执行。(下面的例子即说明了这个问题)

一致性 - 事务执行前和执行后数据库必须处于一致性的状态(数据库满足所有完整性的约束则说明,数据库是一致的)

隔离性 - 事务视数据库为一个一致的状态,事务操作的对象是一致的数据,各事务之间互不影响,它们是依次执行的。 (就事务之间)

永久性 - 即事务执行的结果是永久保存的。

(Four key properties that are abbreviated ACID and ACID is an acronym ([ˈækrəˌnɪm]) for Atomic, Consistent, Isolated and Durability).

Atomic means that all the work in the transaction is treated as a single unit. Either it is all performed or none of it is. Consistent means that a completed transaction leaves the database in a consistent internal state. Isolations means that the transaction sees the database in a consistent state. This transaction operates on a consistent view of the data. If two transactions try to update the same table, one will go first and then the other will follow. Durability means that the results of the transaction are permanently stored in the system.

事务的关键字:BEGIN TRAN/TRANSACTION; COMMIT TRAN/TRANSACTION; ROLLBACK TRAN/TRANSACTION

最简单的事务 - 更新语句

UPDATE tableA SET columnA = xxxx WHERE columnB xxxxx

语句的执行过程:SQL Server把将要做什么写入log 文件(On Disk)->执行操作 -> 将完成操作写入log

如果Server执行失败,那么待事务被提交并且写入log 后,ROLLBACK TRAN就会自动执行SQL <wbr>Server <wbr>Transaction <wbr>(1)

这里有必要对Server 执行失败和语句执行失败做一个简单说明

事务的使用 - 一般情况下事务会被用在存储过程当中

BEGIN TRANSACTION -> ROLLBACK TRANSACTION -> COMMIT TRANSACTION

注意:如果事务当中包含多个更新数据库的语句(一般情况下,都大于一个SQL <wbr>Server <wbr>Transaction <wbr>(1)),那么在执行过程当中比较稳妥的开发,则应该在每一个队数据库的控制语句后添加@@ERROR变量值的判断语句,有问题则返回对应的数值(对于跟踪错误信息很有帮助),并且回滚。 

CREATE PROC sptest

AS

BEGIN TRAN

INSERT dbo.tbTest

VALUES (4,'ccc', 'haha', 222)

IF @@ERROR <>0

BEGIN

ROLLBACK TRAN

RETURN 1

END

UPDATE dbo.tbTest

SET Name = 'gghh'

WHERE ID = 4

IF @@ERROR <>0

BEGIN

ROLLBACK TRAN

RETURN 11

END

COMMIT TRAN

注意:COMMIT TRANSACTION & ROLLBACK TRANSACTION必须有与其对应的BEGIN TRANSACTION 才能正常被执行。 如:BEGIN TRAN .... ROLLBACK TRAN COMMIT TRAN 以上事务只执行了回滚操作,当执行COMMIT TRAN时系统会返回3902的错误即@@ERROR=3902 - COMMIT TRANSACTION 没有对应的BEGIIN TRANSACTION. 相似的, 若ROLLBACK TRANSACTION 没有对应的BEGIN TRANSACTION, 那么则会出现@@ERROR = 3903的错误。故而,这也是我们采用@@ERROR 来协助我们控制事务流的一个方式,见上例。SQL <wbr>Server <wbr>Transaction <wbr>(1)  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值