草庐IT

TRANSACTIONS

全部标签

MySQL:使用自动提交锁定表与启动事务

在MySQL文档中有一个声明我不明白:ThecorrectwaytouseLOCKTABLESandUNLOCKTABLESwithtransactionaltables,suchasInnoDBtables,istobeginatransactionwithSETautocommit=0(notSTARTTRANSACTION)followedbyLOCKTABLES,andtonotcallUNLOCKTABLESuntilyoucommitthetransactionexplicitly.(https://dev.mysql.com/doc/refman/5.7/en/lock-

带有会计应用程序的 MySQL 事务

我有如下表格:transaction_iduser_idother_user_idtrans_typeamount此表用于维护金融类应用的账户交易。它的复式记账方式使得从用户A到B的转账会在表中插入两行,看起来像这样。1,A,B,Sent,-1001,B,A,Received,100任何账户的余额都是通过汇总该账户的交易来计算的。例如:selectsum(amount)fromtransactionswhereuser_id=A锁定资金转移的最佳方式是什么?我当前的代码如下所示:StartTransactionDebitthesender'saccountcheckthebalance

mysql innodb 最大事务大小

使用mysql5.1.41和innodb我正在做一些数据导入,但不能使用loaddatainfile,所以我手动发出插入语句。我发现禁用自动提交和发出100条插入语句然后提交比每次插入后隐式提交要快得多。这让我开始思考,我可以在交易中放入多少数据有什么限制?语句的数量是否有限制,或者它是否与字节大小等有关...? 最佳答案 对于innodb,事务仅受重做日志大小的限制——因此,如果您提交非常大的事务,请确保设置innodb_log_file_size=256M(或更多)。请注意,在发生崩溃的情况下,退税需要一些时间...

mysql - MySQL 中的读取提交与可重复读取?

我目前正在尝试了解MySQL中的事务隔离,正在阅读这本书HighPerformanceMySQL,2ndEdition.下面是他们对这两个事务隔离级别的解释。READCOMMITTEDThedefaultisolationlevelformostdatabasesystems(butnotMySQL!)isREADCOMMITTED.Itsatisfiesthesimpledefinitionofisolationusedearlier:atransactionwillseeonlythosechangesmadebytransactionsthatwerealreadycommitt

mysql - 如何显示事务隔离级别(MySQL)

我想知道当前Mysql数据库设置了什么隔离级别。怎么才能查出来?我试着在谷歌上搜索它,但没有找到它。 最佳答案 检查全局事务级别(mysql8+)SELECT@@transaction_ISOLATION;检查session事务级别(mysql8+)SELECT@@global.transaction_ISOLATION; 关于mysql-如何显示事务隔离级别(MySQL),我们在StackOverflow上找到一个类似的问题: https://stackov

php - 为什么 RedBean 的交易功能不起作用?

我刚刚注意到,在使用PHP和RedBean(以及一个事务)将一些数据导入MySQL数据库时,我可以看到在导入运行时行数在增加。为了证实我的怀疑,我在导入函数的末尾将R::commit()更改为R::rollback()并尝试导入。事实上,即使我调用回滚,数据也已导入并永久保存。我不知道为什么交易没有完成它的工作,也不知道从哪里开始寻找,因此出现了这个问题。Here'stheimportpartofthefunction.让我说明一下,除了事务不起作用之外,导入功能运行良好,因此无需剖析它。感谢所有假设 最佳答案 啊哈!知道了。急于证

mysql - 做数据库事务防止其他用户干扰它

假设我这样做(注意:下面的语法可能不正确,但不要担心......它只是为了说明一点)StartTransactionINSERTINTOtable(id,data)VALUES(100,20),(100,30);SELECT*FROMtableWHEREid=100;EndTransaction因此select的目标是从表中获取所有信息,这些信息只是通过前面的插入插入的,并且只能通过前面的INSERT...现在假设在执行期间,在执行INSERT之后,其他一些用户也执行了id=100的INSERT...事务下一步中的SELECT语句是否也会获取其他用户执行的INSERT插入的行,还是只获

php - 为什么mysqli open transcation锁住数据库?

我正在尝试使用mysqli插入数据,但出现了一些奇怪的行为。例如,当我第一次使用$mysqli->autocommit(FALSE);并花了几分钟运行我的PHP并等待提供的查询时,它将保留数据库直到$mysqli->commit();,所以我不能执行任何其他数据库操作。当我在phpmyadmin中查看状态时,它显示即将到来的SQL查询状态是Waitingfortablemetalock,如何解决?谢谢/*InsertlogQuery*/functionputLog($query){global$mysqli,$ip,$browser,$dateLog,$isQuerySuccess;$

php - 教义中的并发

我有一个应用程序,在php+mysql平台上运行,使用Doctrine2框架。我需要在一个http请求期间执行3个数据库查询:第一个INSERT,第二个SELECT,第三个UPDATE。UPDATE取决于SELECT查询的结果。并发http请求的概率很高。如果出现这种情况,数据库查询混淆(例如INS1、INS2、SEL1、SEL2、UPD1、UPD2),就会导致数据不一致。如何确保INS-SEL-UPD操作的原子性?我需要使用某种锁,还是事务就足够了? 最佳答案 @YaK的回答其实是一个很好的回答。您应该知道一般情况下如何处理锁。专

使用 BEGIN 和 START TRANSACTION 时 MySQL AUTOCOMMIT 状态

我需要在我的MySQL项目中使用事务。但我不确定是否必须使用mysql_query("SETAUTOCOMMIT=0");或不。我知道我有2个选择:开始开始交易我还听说这两项中的一项不需要使用AUTOCOMMIT=0。请帮助我知道什么时候我必须使用AUTOCOMMIT=0实际使用BEGIN或STARTTRANSACTION?谢谢。 最佳答案 如themanual中所述:Bydefault,MySQLrunswithautocommitmodeenabled.Thismeansthatassoonasyouexecuteastatem