Questions tagged «transactions»

一组相互关联的操作必须全部成功才能使它们中的任何一个成功。任何操作的失败都会导致事务中所有操作的回滚。

4
Spring @Transactional只读传播
我正在尝试使用命令模式允许我的Web层在单个事务的上下文中与Hibernate实体一起工作(从而避免延迟加载异常)。但是,我现在对如何处理交易感到困惑。 我的命令调用带有@Transactional注释的服务层方法。这些服务层方法中的某些方法是只读的,例如@Transactional(readOnly=true)-,而某些方法是读/写的。 我的服务层公开了一个命令处理程序,该命令处理程序代表Web层执行传递给它的命令。 @Transactional public Command handle( Command cmd ) throws CommandException 我假设我对使命令处理程序的handle()方法具有事务性是正确的。这就是造成混乱的地方。如果命令的实现调用了多个服务层方法,则命令处理程序将无法知道命令内调用的操作是只读,读/写还是组合操作在两个中。 我不了解此示例中的传播方式。如果要创建该handle()方法readOnly=true,那么如果该命令随后调用带有注释的服务层方法,会发生什么情况@Transactional(realOnly=false)? 非常感谢您对此有所了解,并欢迎您提出宝贵意见。 安德鲁

10
如果无法实现基于REST的事务,那么REST到底有什么用呢?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 10年前关闭。 研究REST时,任何人可能会注意到的第一件事是没有定义任何事务语义,有人说这与REST是隐含的,而其他人则说任何尝试都会导致REST系统的“污染”。 。 但为了争辩,可以说REST确实成为一种流行的“ api”选择,并且宇宙中的每个站点都开始公开宁静的入口点。 没有交易行为(我说的是非补偿性),这些功能到底有什么用?因为在我看来REST的好处之一是它分解了数据的组成部分,您可能会认为这使它们可以使智能客户端从多个服务中组成数据(并添加和调整组成的数据)。但是,如果我无法独立地原子地更改此数据组成,那么使用REST就变得毫无用处。 随着时间的流逝以及对严重数据公开的需求的到来,我们想要的是:简单(REST赢得了胜利),并支持事务行为,因此我们可以可靠地操作这些数据。 现在,我已经在研究中多次阅读了一个特定的论证,它与我们应该如何考虑REST中的事务有关,给出的示例是购物车,您在其中隐式具有隔离性,因为购物车是你的。 但是我不同意这种说法,首先,购物车具有隔离功能只是方便,这不是事务隔离。如果在应用程序的某些部分正在读取数据的同时对购物车进行操作,会发生什么情况从中?我不希望应用程序的读取部分看到“仍在事务中”的数据。 更不用说并非所有数据更改都具有隐式事务模型这一事实,而通过多种服务进行的事务肯定没有。 在我看来,事务需要发生,并且需要以一种使实际的REST调用不了解事实的方式发生(将剩余的负载添加为一个大的否定,但是添加标头可以)。 我已经阅读了一些有关如何通过REST创建事务模型的建议,并且正在编写的一些规范似乎是最近的。 有什么真正的想法吗?不应有比REST更多的东西,以便可以利用REST的简单性来抵制可靠的数据操纵(“酸”交易)。 如果不是,我们是否有望真正做到这一点,并告诉服务开发人员,如果他们想在纯数据世界中进行交互,他们需要支持诸如肥皂之类的单片产品吗?甚至更糟糕的尝试将自己的自定义事务支持构建到REST之类的东西中,从而使每个服务都成为非标准服务并破坏REST的全部功能? 预先感谢您的任何想法。 编辑,添加了简短的场景: 想象一下一个客户窗体,该窗体负责创建专辑,为方便该专辑,而不是要求用户提供uri的艺术家资源,他们可以从艺术家列表中选择(很可能是从艺术家目录中获取) 。 为了便于使用,客户端可以手动输入歌手姓名,以便他们可以创建歌手“内联” ..在发布场景中,客户端代码理解这一点,并且在发送创建专辑请求之前,客户端首先尝试确定如果该艺术家已经存在,则为该艺术家获取uri,否则创建该艺术家并获取该艺术家uri。 然后,客户端代码继续创建相册,这比通常的客户端更聪明,它不仅仅位于REST和“笨拙”的发布之上,而是具有一些处理纯REST逻辑的交互。 但是,在这种情况下,最好先确保不创建艺术家,除非创建了专辑,除非首先创建了艺术家。 这并不像事务所暗示的那样“关键”,但是它定义了客户端代码宁愿作为一项操作发生的一组工作(毕竟,它使用户看起来像是一项操作)。 在这种情况下,我看到的唯一指导是在专辑创建失败的情况下让客户端进行补偿操作,特别是调用删除歌手。但这似乎是有问题的,因为委托人以为艺术家是被孤立的人,尽管可能性不大,如果另一个委托人已经“看到”该艺术家并分配给他,会发生什么? 这些是我对进行数据更改的关注,虽然当然还有其他差距(谁说不能再以后删除艺术家),但是这些动作并不透明(即,这些动作不是自动进行的)客户,但用户已明确要求的内容)。 我希望这有助于阐明该主题。

6
将列添加到表,然后在事务内更新它
我正在创建一个将在MS SQL服务器中运行的脚本。该脚本将运行多个语句,并且需要进行事务处理,如果其中一个语句失败,则将停止整体执行并回滚所有更改。 在发出ALTER TABLE语句向表中添加列,然后更新新添加的列时,我在创建此事务模型时遇到了麻烦。为了立即访问新添加的列,我使用GO命令执行ALTER TABLE语句,然后调用我的UPDATE语句。我面临的问题是我无法在IF语句中发出GO命令。在我的交易模型中,IF语句很重要。这是我尝试运行的脚本的示例代码。还请注意,发出GO命令将丢弃@errorCode变量,并且需要在使用之前在代码中声明下来(此代码不在下面的代码中)。 BEGIN TRANSACTION DECLARE @errorCode INT SET @errorCode = @@ERROR -- ********************************** -- * Settings -- ********************************** IF @errorCode = 0 BEGIN BEGIN TRY ALTER TABLE Color ADD [CodeID] [uniqueidentifier] NOT NULL DEFAULT ('{00000000-0000-0000-0000-000000000000}') GO END TRY BEGIN CATCH SET @errorCode = @@ERROR END CATCH END …


6
围绕单个语句的事务有什么作用?
我了解交易对于协调一对更新可能会很有用。我不了解的是将单个语句包装在事务中,这是我见过的90%。实际上,在现实生活中,以我的经验,找到一系列逻辑相关的事务(每个事务都包装在自己的事务中)是很常见的,但是整个事务并没有包装。 在MS-SQL中,在事务中包装单选,单更新,单插入或单删除有什么好处? 我怀疑这是迷信编程。

3
什么时候使用save !,创建!和update_attributes!在Rails中?
我正在尝试找出何时使用爆炸!保存和更新记录的版本?我已经阅读并听说,如果您只是保存一个记录或更新单个属性,或者您确信没有问题的话,或者总是在控制器外部使用它们,则不需要它们。我想我对保存多件事情然后发生某些事情失败然后数据库中的数据不完整感到不安。我正在从事的当前Rails项目已完成50%以上,目前还没有任何爆炸。我在模型中调用了一些自定义方法,这些方法会更新或创建多个记录,并担心它们是否应该进行某种事务处理。 很抱歉,如果这看起来很分散,但我只是想弄清楚如何正确使用ActiveRecord中的保存功能,使我的生活更轻松,最后一点压力也减轻了。谢谢你的时间。

4
MySQL:存储过程中的事务
我的存储过程的基本结构是 BEGIN .. Declare statements .. START TRANSACTION; .. Query 1 .. .. Query 2 .. .. Query 3 .. COMMIT; END MySQL版本: 5.1.61-0ubuntu0.11.10.1-log 当前,如果“查询2”失败,则提交“查询1”的结果。 如果任何查询失败,如何回滚事务?

2
如何创建LINQ to SQL事务?
我有一段涉及多个插入的代码,但是需要在完成向其他表中的插入之前执行Submitchanges方法,以便我可以获取一个ID。我一直在互联网上搜索,找不到如何在linq to sql中创建事务。我已在要进行交易的代码中添加了注释。 var created = false; try { var newCharacter = new Character(); newCharacter.characterName = chracterName; newCharacter.characterLevel = 1; newCharacter.characterExperience = 0; newCharacter.userUsername = userUsername; newCharacter.characterClassID = ccslst[0].characterClassID; //Open transaction ydc.Characters.InsertOnSubmit(newCharacter); ydc.SubmitChanges(); foreach (var ccs in ccslst) { var cs = new CharacterStat(); cs.statId = ccs.statID; cs.statValue = ccs.statValue; …

9
如何在PostgreSQL中进行大型非阻塞更新?
我想在PostgreSQL的一个表上做一个大的更新,但是我不需要在整个操作中维护事务的完整性,因为我知道我要更改的列在执行期间不会被写入或读取。更新。我想知道psql控制台中是否有一种简便的方法可以使这些类型的操作更快。 例如,假设我有一个名为“ orders”的表,其中有3500万行,我想这样做: UPDATE orders SET status = null; 为了避免转移到主题之外的讨论,我们假定当前3500万列的所有status值都设置为相同(非null)值,从而使索引无用。 该语句的问题在于生效需要很长时间(仅是由于锁定),并且所有更改的行都被锁定,直到完成整个更新为止。此更新可能需要5个小时,而类似 UPDATE orders SET status = null WHERE (order_id > 0 and order_id < 1000000); 可能需要1分钟。超过3500万行,执行上述操作并将其分成35个块,仅需35分钟,可为我节省4小时25分钟。 我可以使用脚本进一步分解(在此处使用伪代码): for (i = 0 to 3500) { db_operation ("UPDATE orders SET status = null WHERE (order_id >" + (i*1000)" + " AND order_id …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.