草庐IT

TRANSACTIONS

全部标签

MongoDB 更新多个文档

架构:{name:String,available:Boolean,for:String}有“一个”:{name:"a",available:true,for:["b","c"]}和“b”:{name:"b",available:true,for:["a","b]}如果我更新a.available=false,我应该同时更新b.available=false。我怎样才能更新两个文档并确保在更新“a”和“b”之间没有其他进程/线程获得“b”。 最佳答案 MongoDB不支持原子事务。因此,如果您需要在第二次更新失败时让第一次更新“自行

java - Spring——在命令行工具中使用注解事务管理

我正在使用Spring框架在Java中开发一个小型应用程序。作为其中的一部分,我在这个Spring项目中开发了一个命令行工具,它读取CSV文件并将其插入MySQL数据库。我想为此目的使用Soring自己的事务管理,并且我发现使用@Transactional的注释方法很有吸引力。问题是即使产生异常,带有这个注解的函数也不会回滚。这是我认为与此问题相关的一小部分代码:publicstaticvoidmain(String[]args)throwsException{//somevariablesandstuffhere//gettingapplicationcontextApplicati

php - Redbean 的交易无效

我今天来这里是因为我无法弄清楚我使用RedbeanPHP进行的交易有什么问题。我猜问题出在MySQL的“autocommit”值上,因为它始终处于打开状态。长话短说:1)R::freeze(true);已发出,2)尝试了R::begin()..R::commit()和R::transaction($callback)语法这是一个带有测试代码的简单类:classTestTransactions{publicfunctiontestme($args){$tstname=$args;$src=R::findOne('batchscripts','batchclass=:tstname',ar

php - 如何在 Laravel Eloquent orm 或 DB facades 中进行分布式事务?

我在Laravel中找不到像XA这样的API,并且在Eloquent或DBfacades中似乎没有实现。如果我想在Laravel中使用XA或者其他方式做一个MySQL分布式事务,应该怎么办? 最佳答案 如果您不需要使用分布式事务,请不要使用它。试着考虑一下你的数据库结构设计是否正确?如果你还需要它。我觉得你需要自己写;第1步:对于第一个数据库,您需要为其XA事务生成一个唯一ID。并尝试执行sql,如果成功则运行XAPREPAREyour_xa_id;第二步:对于另一个数据库,需要做与第一步相同的事情;第三步:检查第一步和第二步是否成

mysql - Mysql事务提交是不是按顺序?

共有3个并发mysql会话。2个写入table1,1个读取table1。所有这3个会话在执行事务之前都引用了一个唯一的锁,它用于被授予没有人将同时读/写表1的权限。会议1STARTTRANSACTIONSELECTidFROMglobal_lockWHEREid=1FORUPDATE;t1=GetCurrentTimeMills()//usedpsuedocodehereINSERTINTOtable1(value,updated)VALUES('v1',t1);COMMIT;会议2STARTTRANSACTIONSELECTidFROMglobal_lockWHEREid=1FORU

php - 处理现实世界中的交易

我正在重写这个问题,因为它没有得到回应。我正在尝试找出处理数据库事务的正确方法。我所看到的关于如何进行交易的一切都是非常基本的,大致如下:查询“begin”开始交易运行您的查询。如果一切正常,提交交易。我明白了,但我不明白这是错误(死锁)处理。我听说过两种选择:向用户显示错误并说“再试一次”当场重试,直到成功。对我来说,因为这样的技术问题而告诉用户再试一次似乎很糟糕-实际应用程序是否经常这样做?这是我有时看到的“糟糕,出了点问题”的一次性错误吗?这是针对网站的,因此用户甚至不应该知道数据库。所以我有几个问题:对于同时涉及多个用户的数据,我应该采用哪种故障处理方法?如果我选择“即时重试”

mysql - 两个索引列上的 SELECT FOR UPDATE 和 WHERE 条件 - 什么是锁定策略?

这个问题是这个问题的逻辑延续:HowmanyrowswillbelockedbySELECT...ORDERBYxxxLIMIT1FORUPDATE?假设我有这样的选择:SELECTid,statusFROMjobWHEREstatus=XXXANDidIN(1,2,3)FORUPDATEid为主键,status索引在这种情况下,MySQL的锁定策略是什么?锁定仅匹配两个条件的行锁定所有匹配第一个条件的行+分别锁定所有匹配第二个条件的行锁定整个表我认为最合乎逻辑的是2。但是...我不确定。能详细说说吗? 最佳答案 好吧,我进行了测试

两个相同查询(不同参数)的MySQL InnoDB死锁问题

我有下表CREATETABLEIFNOTEXISTS`task`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`job_id`int(10)unsignedNOTNULLCOMMENT'Theidoftherelatedjob',`server_id`tinyint(4)NOTNULLDEFAULT'0'COMMENT'job/taskowner',`jobtype_id`int(10)unsignedNOTNULLDEFAULT'0',`node_id`int(10)unsignedNOTNULLCOMMENT'Theidoftheusercur

具有 1 个更新语句的 MySQL 事务在 4000 行表中花费 >4s

大多数情况下,此交易耗时4秒!此存储过程每秒运行5-6次左右。我的存储过程非常简单(innoDB-可重复读取):STARTTRANSACTION;SELECTend_timeINTOcurrentEndTimeFROMauctionsWHEREid=var_auction_id;IF(ADDTIME(currentEndTime,var_time_increment)我想找出导致4s尖峰的原因,我已经尝试过:我认为它可能是并发的,但我看到这个存储过程在1秒内被调用了5次,并且这些事务耗时索引已正确设置在id上表很小...大约4000行。不能真正运行慢查询日志,因为它是MySQL5.0,

mysql - 使用事务运行 3 个数据库查询 1k 次是没有事务的两倍。正确的?

我正在做一个小测试。以下代码运行3个随机查询1000次(针对innoDB表):delimiter//createproceduredtest()begindeclarev_maxint;declarev_counterintdefault0;declareholderint;setv_max=1000;truncatetableuser;starttransaction;whilev_counter我在starttransaction;和commit;中运行了上面的代码,然后再次删除了这两个语句。我的想法是,我想看看它是否在定义了事务的情况下运行得比没有定义的事务慢。我发现第一个测试使