2011-03-16 63 views
0

在MySQL中使用事务的想法很好。如果出现问题,能够回滚事务的想法也很好。PHP和MySQL:自己运行事务吗?

我的问题是这样的:在一个应用程序,它是值得它来控制自己的交易,或让MySQL的照顾它给我吗?换句话说,应该对MySQL给我的自动提交功能有一个主动的不信任?

例子:

try 
{ 
    $mysqli->autocommit(0); 
    //Normally, would go through the steps of prepping and executing etc, 
    //but I'll use this for brevity. 
    if(!$mysqli->query("..")) 
     throw new Exception(".."); 
    $mysqli->commit() 
} 
catch(Exception $e) 
{ 
    $mysqli->rollback(); //Doing this so I make sure I get my rollback 
    error_log(".."); 
} 

,而不是让自动提交功能做自己的工作得心应手。

注:我在写仅设置为同时运行一个查询的应用程序,不会有任何的情况下(如在一些(大部分)银行等金融应用程序)在那里,我需要确保两个查询改变数据,成功。

这主要体现出这种想来控制这种东西(在自动提交功能有一定lacktherof)。

+0

问:你想要什么来实现呢? – middus 2011-03-17 00:01:20

回答

2

正如经常出现的答案是:这取决于。如果你想确保

update(x); 
update(y); 

是原子,即两个更新或者没有被执行,那么您应关闭自动提交。如果您只做一个查询,则不需要自己控制事务。如果你唯一的交易失败了,那么没有东西可以回滚,对吧?

相关提示:你可能想了解交易的ACID properties