草庐IT

TRANSACTIONS

全部标签

php - PDO 事务是否涵盖 PDO::query()?

位于PHP.net的PDO交易示例表明PDO::exec()是事务处理的,但是没有这样的例子使用PDO::query()。事务是否涵盖PDO::query()?此外,据我所知,PDO::query()返回一个结果集。如果是事务处理的,怎么会有结果集,因为语句在提交之前不应该执行?(这是否意味着PDO::query()确实是not交易?)我似乎找不到官方引用资料来说明它是否是. 最佳答案 您误解了交易。事务只是保证操作是原子的:要么所有操作都成功,要么都不成功。一旦你开始一个事务,每个查询都会被执行,并且它会被记录在事务日志中。如果操

php - 如何判断MySQL事务成功

在对MySQL的常规单个查询语句中,我可以使用mysql_affected_rows()==1来确定是否更新了某些内容。现在假设我正在尝试执行以下事务:USEmyDB;STARTTRANSACTION;UPDATEmembersSETmember_active=0WHEREmember_id=53;UPDATEmember_subscriptionsSETsubscription_active=0WHEREmember_id=53;COMMIT;ROLLBACK;因为我有这两个更新语句,我是否可以在一个成功的事务上等同于mysql_affected_rows()==2?或者,是否有更好

mysql - Innodb交易和房间预订

我目前正在阅读很多关于InnoDB中的事务的资料,此时我只使用过myISAM表,所以我不太习惯这一切:这是我的表格方案:CREATETABLEIFNOTEXISTS`reservations`(`id_reservation`mediumint(8)unsignedNOTNULLAUTO_INCREMENT,`id_room`mediumint(8)unsignedNOTNULL,`date_from`dateNOTNULL,`date_to`dateNOTNULL,`cancelled`enum('Y','N')NOTNULLDEFAULT'N',PRIMARYKEY(`id_res

MySQL更新不更新所有记录

我有一个列出所有订单的数据库表。每个周末都会运行一个cron并为每个客户生成发票。代码遍历每个客户,获取他们最近的订单,创建一个PDF,然后更新订单表以记录每个订单的发票ID。最后的更新查询是:更新预订集invoiceed='12345'whereusername='test-username'andinvoiced='';因此,为test-username之前未开具发票的所有订单将开具发票设置为12345。我遇到了一个问题,订单被添加到PDF但没有更新以反射(reflect)它们已开具发票的事实。我已经开始手动运行更新查询并遇到了一个奇怪的场景。一个客户可能有60个订单。如果我运行一

c# - 在 C# 中使用 Entity Framework、Mysql 和 LINQ to SQL 提交和回滚事务

我的问题是transaction没有正常工作,如果在trascation期间发生异常,它不应该为一个表保存数据当所有表都正确后才保存数据。请考虑以下事项:databaseEntitesobjEntites=null;using(objEntites=newdatabaseEntites()){objEntites.Connection.Open();using(System.Data.Common.DbTransactiontransaction=objEntites.Connection.BeginTransaction()){try{customerobjcust=newcusto

php - MySQL 事务是否锁定正在更新和/或选择的 InnoDB 中的行

使用InnoDB,MySQL事务是否在调用BEGIN时锁定新创建的行,然后在调用commit时解锁它们?例如:$query="INSERTINTOemployee(ssn,name,phone)values('123-45-6789','Matt','1-800-555-1212')";mysql_query("BEGIN");$result=mysql_query($query);mysql_query("COMMIT);INSERT语句是锁定该行直到COMMIT被调用,还是回滚以防止其他并发连接修改它?如果不是,您是否可以通过调用selectFORUPDATE仅锁定事务中的一行,从

php - SQL事务和表SELECT LOCK说明

我有一个关于在线交易的问题,想用SELECT和UPDATE查询澄清以下问题。我将使用下面的示例向您解释这一点。X正在进行在线交易。他的账户余额是1000美元。他打算购买200美元的商品,之后他的帐户余额应该是800美元。那也行;现在让我进一步说明这一点BeginDBtransaction.Step1:accountbalanceis$1000{Selectthebalancefromadifferentscript}Step2:Buysomethingfor$200{Selectthebalancefromanotherscript}Step3:Remainingbalance$800

mysql - 最新行在选择中不可用...以进行更新

我遇到一个问题,我正在运行一个Web服务,该服务正在执行涉及两个表Users和Transactions的事务。问题是,当我从Transactions中选择时,它有时无法找到最新的行,但我可以看到它存在于数据库中。我正在使用Perl/Dancer作为Web框架,尽管我认为我遇到的问题是在数据库级别(我正在使用MySQL/InnoDB)。伪代码如下所示:my$dbh=DBI->connect_cached(("DBI:mysql:Database;host=localhost;mysql_ssl=1","user","password",{RaiseError=>0,AutoCommit=

MySQL:事务隔离级别、死锁

我有一个长时间运行的导入产品的过程,有时我会遇到死锁错误。据我所知,我认为如果在脚本执行期间将隔离级别切换为Serializable,我将解决死锁问题。但是,我能做什么,我可以打开2个终端并使用Serializable重现死锁。conn1:SETGLOBALTRANSACTIONISOLATIONLEVELSERIALAZIBLE;conn1:STARTTRANSACTION;conn2:STARTTRANSACTION;conn1:UPDATEcore_config_datasetvalue=1WHEREconfig_id=1;conn2:UPDATEcore_config_data

mysql - nodejs 中的事务

我有2个查询要在事务中执行回滚varmysql=require('mysql');varconnection=mysql.createConnection({host:"host",user:"user",password:"pass"});varquery1="insertintotable1values(1,2,3)";varquery2="updatelast_updatesetdate=now()";connection.beginTransaction(function(err){if(err){throwerr;}connection.query(query1,functi