草庐IT

TRANSACTIONS

全部标签

java - 交易问题

我使用Java和MySql作为数据库。我正在运行多个应用程序实例。我从数据库中选择一条记录,同时在获取后,我将其状态更新为“处理中”,这样其他实例就无法访问该记录。但是发生的情况是实例运行得如此之快,以至于当一个实例正在访问一条记录时,另一个实例也在第一个实例对“处理中”进行更新之前访问同一条记录。我应该怎么做才能在其他实例访问它之前也进行更新?我在我的代码中使用了conn.setTransactionIsolation(conn.TRANSACTION_READ_COMMITTED),但这也没有帮助。提前致谢。 最佳答案 您需要一

mysql - 在事务中锁定表

我希望能够锁定整个表以防止在“beginTransaction”和结束“commit”或“rollback”之间在其中进行任何INSERT或UPDATE。我知道开始事务会导致隐式UNLOCKTABLES,而LOCK表会导致隐式COMMIT...那么有什么方法可以做我想做的事吗? 最佳答案 为什么?也许您错过了交易的重点。如果您使用可重复读取的事务隔离、插入、更新等,可能会在您的事务期间发生,但您不会看到它们。因此,就您的流程而言,表被锁定以进行插入/更新。除非它们仍在发生,否则它们仍然对光盘具有持久性,并且其他过程可以继续。在您执行

java - hibernate 事务没有正确回滚

我有2个表,比如Item和Property,还有一个映射到两者的hibernate对象。表Item到Property的映射如下所示一个项目可以有多个属性。选择、插入等一切正常。但是当出现错误时,对属性表的插入不会回滚。发生的情况是,如果我正在编辑具有N个属性的项目并在字段中输入无效值,则下次我检索该项目时,它具有2*N个属性。编辑---我的类(class)是这样的@AutowiredSessionFactorysessionFactory@TransactionalpublicvoidupdateItem(Itemi){...//Theonly2statementsdealingwit

mysql - 如何使这两个同时发生的事务始终成功,而不会导致唯一性冲突?

假设有一个tags表,其中有一个名为name的唯一字段。我有一个交易,我在其中执行选择以查看是否存在具有特定名称的标签,如果不存在,我将创建它:STARTTRANSACTION;SELECT*FROMTAGSWHERENAME="FOO";--IFATAGNAMED"FOO"DIDN'TEXISTTHENINSERTINTOTAGSVALUES("FOO");COMMIT;当两个客户端以默认隔离级别(可重复读取)运行此事务时,这种交错将导致其中一个客户端因唯一性冲突而失败:STARTTRANSACTION;STARTTRANSACTION;SELECT*FROMTAGSWHERENAM

php - 处理来自不同用户的同时 MySQL 查询

我有一个PHP/MySQL注册系统,它限制了可以注册某些东西的人数。所以,假设有5个空位,其中4个已经满了。现在,登录的2个不同用户同时提交了一个表单,该表单执行MySQL查询以将该人添加到列表中。简化后,PHP逻辑类似于:if($numberOfSpotsTaken现在,因为两个用户同时提交请求,当代码检查占用了多少个点时,两者都小于5。最终发生的情况是,两个请求都通过了,当限制应该是5人时,最终有6人出现在列表中。如何防止这种情况发生,使同时提交请求的两个(或更多)用户无法绕过注册人数限制? 最佳答案 我能够通过使用PDO的be

php - MySQL 事务时序

我有一些使用PHP和MySQL的经验,并且我了解事务,但使用它们的经验相当少。我正在开发一个Web应用程序,用户将在其中对单个数据库进行/执行各种CRUD操作。(是的,它是InnoDB)。我很好奇交易的行为方式,我会给你一个相当简单的例子:1.)用户1开始一个事务,将我的数据库中的JohnSmith的名称更新为JohnathonSmith。2.)用户2开始一项交易以读取JohnSmith的姓名紧接在用户1的交易开始之后,但在此之前已提交。用户2会看到什么结果?John还是Johnathon?用户1在交易过程中,JohnSmith的记录是被锁定了,还是交易过程中可以读取?此外,这两个交易

php - 我怎么知道 Laravel 中的交易是否顺利?

假设我在Laravel中使用一个事务:DB::transaction(function(){//DoyourSQLhere});我有什么办法可以知道交易是否顺利?DB::transaction(function(){//DoyourSQLhere});//HerehowcanIknowifthetransactionisok? 最佳答案 除非某些组件在事务执行期间抛出异常,否则事务应该按预期工作如果你想检查是否有特定的错误,你可以这样做:try{DB::transaction(function(){//DoyourSQLhere})

mysql - Left Join Sum 和比较

我有一个股票购买程序,每个购买交易可以存在多个出售交易。我正在尝试创建一个查询,以提取我仍然投资的所有股票。例如,如果我买入50股股票,一天卖出20股,另一天卖出10股,我应该还剩下20股。我已经完成了大部分艰苦的工作,但我发誓我遗漏了一些小东西。如果sell_transaction表中不存在,我当前的查询将不会提取结果。在我的示例中,这是buy_transactions中的transaction_id3,它应该返回100股但什么也没返回。以下代码可以放入SQLFiddle中并进行处理。架构CREATETABLE`buy_transactions`(`buy_transactions_

mysql - 两个复制主 mysql 服务器之间的事务

对于带有innodb引擎的复制mysqlmaster到master数据库,如果要在数据库A上启动一个事务,那么该行是否会锁定数据库B直到事务被提交? 最佳答案 获得第一个事务的主服务器与第二个主服务器完全分开,它们通过二进制日志进行通信。https://dev.mysql.com/doc/refman/5.7/en/replication-formats.html在需要事务的情况下,直到事务完成后才将实际语句写入日志。https://dev.mysql.com/doc/refman/5.7/en/replication-featur

mysql - 为 MySQL 中不断增长的表创建摘要表的最佳实践

我有一个名为transactions的表,其中包含约2000万条记录。这张table每秒都在增长。我用以下方法计算用户当前余额:SELECTsum(`amount`)FROM`transactions`WHERE`user_id`=1000;我在我的Web应用程序的顶部栏中显示用户当前余额,用户可以看到他/她有多少余额!显然每次用户浏览我的网页应用页面时,都必须执行上述查询来计算当前用户余额!我想创建一个汇总表来获取当前用户余额,而无需查询具有约2000万条记录的transactions表!请注意,在我们的工作流程中,一个用户可能同时进行多个交易(一个用户甚至可能在一秒钟内进行多个交易