问题标签 [nested-transactions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1775 浏览

mysql - Real-world uses of MySQL savepoints in web services?

Does anyone have experience they can share using MySQL savepoints (directly or via an ORM), especially in a non-trivial web service? Where have you actually used them? Are they reliable enough (assuming you're willing to run a fairly recent version of MySQL) or too bleeding-edge or expensive?

Lastly, does anyone have experience with something like the following use case and did you use savepoints for it? Say the main point of some specific unit of work is to add a row to an Orders table (or whatever, doesn't have to be order-related, of course) and update an OrdersAuditInfo table, in the same transaction. It is essential that Orders be updated if at all possible, but OrdersAuditInfo table is not as essential (e.g., it's ok to just log an error to a file, but keep going with the overall transaction). At a low level it might look like this (warning, pseudo-SQL follows):

But even here perhaps there'd be a better (or at least more common) idiom? One could do the OrdersAuditInfo insert in a completely different transaction but it would be nice to be guaranteed that the OrdersAuditInfo table were not written to unless the final COMMIT actually worked.

0 投票
3 回答
11877 浏览

sql-server - SQL Server 2005:为什么要命名事务?

我一直在整理 SQL Server 中的整个嵌套事务,并且发现了这些对嵌套 trans 行为的理解的要点:

  • 嵌套事务时,只有最外层的提交才会真正提交。
  • “提交 Trans txn_name”,当嵌套时,将始终适用于最里面的事务,即使 txn_name 指的是外部事务。
  • "ROLLBACK TRAN" (no name) ,即使在内部事务中,也会回滚所有事务。
  • "ROLLBACK TRAN txn_name" - txn_name 必须引用最外层的 txn 名称。如果没有,它将失败。

鉴于这些,命名交易有什么好处吗?您不能使用它来定位特定的事务,无论是提交还是回滚。它仅用于代码注释目的吗?

谢谢,

约尼

0 投票
2 回答
45276 浏览

mysql - MySQL中是否允许嵌套事务?

MySQL 是否允许使用嵌套事务?

0 投票
1 回答
253 浏览

.net - .NET 数据提供者 - 我如何确定他们可以做什么?

我有可以使用不支持事务或不支持嵌套事务的提供程序执行的代码。

我将如何以编程方式确定这种支持?

例如,下面的代码在使用 MySQL .NET 连接器时在最终提交时抛出 System.InvalidOperationException,但对于 MSSQL 工作正常。

我希望能够更改代码以适应各种提供者,而不必根据提供者的类型对测试进行硬编码(例如,我不想这样做if(typeof(connection) == "some provider name")

0 投票
2 回答
3697 浏览

nhibernate - 实现 NHibernate 嵌套事务行为

我正在尝试使用 NHibernate 的事务控制和 FlushMode 选项来实现某种嵌套事务行为,但是在阅读过多之后事情变得有点混乱,所以任何关于我在下面列出的事实的确认都将非常有用。

我想要的是打开一项拆分为小交易的大交易。想象以下场景:

  • TX1 打开一个 TX 并插入一个 Person 的记录;
  • TX2 打开一个 TX 并将这个人的名字更新为 P2;
  • TX2 提交;
  • TX3 打开一个 TX 并将这个人的名字更新为 P3;
  • TX3 回滚;
  • TX1 提交;

我希望看到 NH 将 INSERT 和 TX2 UPDATE 发送到数据库,只是忽略 TX3,因为它已回滚。

我尝试使用 FlushMode = Never 并且仅在要求正确的开始/提交/回滚后刷新会话,但 NH 始终使用对象的最终状态更新数据库,与提交和回滚无关。这正常吗?当使用 FlushMode = Never 时,NH 是否真的忽略了事务控制?

我也尝试使用 FlushMode = Commit 并打开嵌套事务,但我发现,因为 ADO.NET,嵌套事务实际上总是相同的事务。

请注意,我并不是要实现“全有或全无”的行为。我正在寻找一种保存点的工作方式。有没有办法用 NH 做到这一点(保存点)?

先感谢您。

菲利普

0 投票
3 回答
6337 浏览

c# - 如何使用 ADO.NET 和 SQL Server 启用嵌套事务?

我对如何检查您是否在进行交易有类似的问题。我如何允许嵌套事务而不是检查?

我正在使用带有 ADO.NET 的 Microsoft SQL Server 数据库。我已经看到使用 T-SQL 的示例以及使用 begin 和使用事务名​​称启动事务的示例。调用 connection.BeginTransaction 时,我在同一个连接中调用另一个函数,它再次调用 BeginTransaction,这给了我异常:

似乎许多 Microsoft 变体都允许这样做,但我不知道如何使用我的 .mdf 文件来做到这一点。

如何允许使用 C# 和 ADO.NET 与 Microsoft SQL Server 数据库进行嵌套事务?

0 投票
2 回答
2227 浏览

.net - 休眠和嵌套事务

我知道 nhibernate 不支持嵌套事务。

假设我得到了这样的东西:

  1. UserService.BeginTransaction(在当前会话上)
  2. 用户服务.保存
  3. 用户服务->FeedService
    1. FeedService.BeginTransaction(在当前会话中)
    2. FeedService.Save
    3. FeedService.Commit(在#3.1 中返回的事务上)
  4. 用户服务->地址服务
    1. AddressService.BeginTransaction(在当前会话上)
    2. 地址服务.保存
    3. AddressService.Commit(在 #4.1 中返回的事务上)
  5. UserService.Commit(在 #1 中返回的事务上)

在 #3.3 中调用 commit 时会发生什么,事务是否已提交?我需要一切来成功或失败。

0 投票
2 回答
743 浏览

c# - 当 TransactionScope 和嵌套事务都不支持时怎么办?

TransactionScope 是一个了不起的功能,但很少有提供商能正确实现它。我不想将连接作为参数传递。

0 投票
2 回答
3331 浏览

ruby-on-rails - Rails 3. 嵌套事务。子块中的异常

为什么在子块中出现异常后 ActiveRecord 不回滚嵌套事务中的更改?

以下是示例:

1.

2.

谢谢。

Debian GNU/Linux 5.0.6;

红宝石 1.9.2;

Ruby on Rails 3.0.1;

SQLite 3.7.3。

0 投票
1 回答
124 浏览

.net - ActiveRecord 中需要嵌套事务的嵌套 UI

我有一个编辑模型类型 M1 的对话框 D1,以及另一个编辑模型类型 M2 的对话框 D2。M2 包含的内容之一是对 M1 的引用,因此为了方便用户,D2 包含一个启动 D1 的按钮,此外 D1 和 D2 都可以从顶层访问。

D1 和 D2 中的每一个都在入口处创建一个TransactionScope(使用TransactionMode.New),在用户与对话框交互时修改模型对象(M1 或 M2),并在用户按下 OK/Cancel 按钮时适当地提交/回滚。

当从顶层打开对话框时,这可以很好地隔离。

从 D2 中打开 D1 时,预期的行为是在 D1 中单击 OK 应立即保存到数据库,然后 M1 中的更改应对 D2 可见。(然后 D2 可以保存或取消自己对 M2 的更改,而不会影响 M1。)

实际发生的情况是,当 D1 关闭时(以及在 D2 关闭之前),对 M1 的更改似乎确实被保存到数据库中,但 D2 看不到对 M1 的更改——大概是因为 D2 中的会话/事务认为它具有最新的对象,因此即使FindFirst调用 etc 也不会重新查询数据库。有什么方法可以强制它(不会丢失对 M2 的更改)?

(另一个奇怪的行为是 D1 和 D2 都挂在 上TransactionScope.OnCompleted,但是只有在 D2 关闭时才会在 D1 上触发,因为从 D2 调用 D1 的情况。)