在 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( ".." );
}
而不是让自动提交功能完成它自己方便的工作。
注意:我正在编写的应用程序仅设置为一次运行一个查询,在任何情况下(例如在某些(大多数)银行和其他金融应用程序中)我都需要确保两个查询更改数据的查询成功。
这主要是因为想要控制这类东西(以及自动提交功能中的某些缺乏)。
最佳答案
答案通常是:这取决于情况。如果您想确保
update(x);
update(y);
是原子的,即更新或都不执行,您应该关闭自动提交。如果您只执行一项查询,则无需自己控制事务。如果您唯一的事务失败,就没有什么可以回滚的,对吗?
相关说明:您可能想阅读 ACID properties交易数量。
关于PHP 和 MySQL : Running transactions yourself?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5333183/