PHP 和 MySQL : Running transactions yourself?

标签 php mysql transactions mysqli autocommit

在 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/

相关文章:

php - CakePHP 2 无法连接 MySQL

PHP Mysql 查询(插入)问题

jakarta-ee - Quartz 不参与 EJB 事务(在 CMT 模式下)

hibernate - Grails交易问题

PHP Preg 匹配错误

PHP/Phinx - 插入经度/纬度导致 PDO MySQL 几何对象错误

php - 我无法更新mysql数据库

mysql - 是否可以使用 Collection_Select 从引用模型为同一表单中的多个变量生成相同的下拉列表?

c++ - 将 mysql 包含到 cmake 中

java - 使用 JdbcTemplate 开始和回滚事务