李天平的博客


天道酬勤
随笔 - 169, 文章 - 17, 评论 - 2977, 阅读 - 116万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数据库事务是其他事务模型的基础,当一个事务创建时不同数据库系统都有自己的规则。SQL Server默认在自动提交的模式下工作,每个语句执行完后都会立即提交;与此对照的是Oracle需要你包含一个提交语句。但是当一个语句通过OLE DB执行时,它执行完后一个提交动作会被附加上去。例如:

DECLARE @TranName VARCHAR(20);

SELECT @TranName = 'MyTransaction';

 

BEGIN TRANSACTION @TranName;

GO

USE AdventureWorks;

GO

DELETE FROM AdventureWorks.HumanResources.JobCandidate

    WHERE JobCandidateID = 13;

GO

 

COMMIT TRANSACTION MyTransaction;

GO

或者:

CREATE PROCEDURE Tran1 

as 

begin tran 

set xact_abort on

Insert Into P_Category(CategoryId,Name)values('1','test1') 

Insert Into P_Category(CategoryId,Name)values('2','test2') 

commit tran 

GO

set xact_abort on表示遇到错误立即回滚。

当然你也可以这么写:

CREATE PROCEDURE tran1

as

begin tran

Insert Into P_Category(CategoryId,Name)values('1','test1') 

if(@@error<>0)

 rollback tran

else

 begin

  Insert Into P_Category(CategoryId,Name)values('2','test2')

  if(@@error<>0)

   rollback tran

  else

   commit tran

 end

GO

数据库级别事务有它的优势和限制。

优势:

l  所有的事务逻辑包含在一个单独的调用中。

l  拥有运行一个事务的最佳性能。

l  独立于应用程序。

限制:

l  事务上下文仅存在于数据库调用中。

l  数据库代码与数据库系统有关。

 

选自《亮剑.NET. .NET深入体验与实战精要》一书 5.4 节。

 

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示