对每个查询使用php事务是不好的做法吗?

时间:2016-05-28 12:32:07

标签: php performance transactions conventions

在PHP中,您可以在执行查询时启动事务。但是当应该你使用它?每个查询都使用此功能是不是很糟糕?或者,您是否应该在添加/删除/更新大量数据时使用此查询?

交易示例:

try {
    $db->beginTransaction();

    $db->exec("some query");

    $stmt = $db->prepare("another query");
    $stmt->execute(array($value));

    $stmt = $db->prepare("another query again??");
    $stmt->execute(array($value2, $value3));

    $db->commit();
} catch(PDOException $ex) {
    //Something went wrong rollback!
    $db->rollBack();
    echo $ex->getMessage();
}

我的猜测是,如果对代码中的每个查询执行此操作,都会严重降低性能

tl; dr 您可以在每个查询中使用交易吗?或者,您是否应该在对数据库执行大型操作时使用它们?

1 个答案:

答案 0 :(得分:1)

如果您想进行所有更改或者不进行任何更改,您肯定需要使用交易。例如,如果您将钱从一个人转移到另一个人,您应该增加一个人的余额并减少另一个人的余额。

如果您有许多简单的查询并且需要性能,那么使用事务是很好的。它取决于数据库,但通常数据库尝试在事务期间在内存中进行所有更改,然后才刷新到磁盘。内存比磁盘快得多。

但是,只有你有高负荷网站或者你需要插入1000个记录并且每个100毫秒是重要的。如果您的查询少于100个,它们很简单,如果执行其中一半然后脚本中断(服务器重启,PHP超时等)并且您的数据仍然一致,则没有任何错误 - 您可能不会使用事务。

如果您认为如果不明确启动它们就不使用交易,那么您可能错了。它取决于数据库,但它可以自动启动每个查询的事务 https://stackoverflow.com/a/2950764/437763