Php 如果我只执行一个查询,那么使用事务的好处是否足够重要?

Php 如果我只执行一个查询,那么使用事务的好处是否足够重要?,php,mysql,transactions,pdo,Php,Mysql,Transactions,Pdo,我想知道,因为事务在执行一组查询时很有用。然而,如果我只执行一个查询,我应该费心使用它吗 我现在有 $res = $pdo->query("SELECT id FROM products LIMIT 5"); $row = $res->fetchAll(); 它所做的就是这样。以下代码是否更有效?我想这不是因为它只做一件事,但我不确定 $pdo->beginTransaction(); $res = $pdo->exec("SELECT id FROM products

我想知道,因为事务在执行一组查询时很有用。然而,如果我只执行一个查询,我应该费心使用它吗

我现在有

$res = $pdo->query("SELECT id FROM products LIMIT 5");
$row = $res->fetchAll();
它所做的就是这样。以下代码是否更有效?我想这不是因为它只做一件事,但我不确定

$pdo->beginTransaction();
$res = $pdo->exec("SELECT id FROM products LIMIT 5");
$pdo->commit();
如果不是更有效,是否有其他更有效的方法


谢谢。

如果在查询后执行的任何操作对脚本正在执行的功能很重要,比如说,电子商务交易,并且保留查询将有问题,即与支付相关的某些操作失败,那么即使只执行一个查询,您也会希望使用交易。否则,您将无需付款即可购买

如果该事务是该脚本中唯一发生的事情,那么事务是不必要的,可以/应该避免

下面是一个简单的例子:

try 
{
    $pdo->beginTransaction();
    $res = $pdo->exec("INSERT INTO orders ....");
    // Try to make payment
    $payment->process();
    $pdo->commit();
}
catch (Exception $e)
{
    // Payment failed unexpectedly! Rollback the transaction.
    $pdo->rollback();
}

当然,您希望更好地处理此类故障,但这应该能让您很好地演示事务何时合适。

如果查询后执行的任何操作对脚本正在执行的功能很重要,比如说电子商务事务并保留查询可能会出现问题,即与支付失败相关的内容,那么即使只执行一个查询,您也会希望使用交易记录。否则,您将无需付款即可购买

如果该事务是该脚本中唯一发生的事情,那么事务是不必要的,可以/应该避免

下面是一个简单的例子:

try 
{
    $pdo->beginTransaction();
    $res = $pdo->exec("INSERT INTO orders ....");
    // Try to make payment
    $payment->process();
    $pdo->commit();
}
catch (Exception $e)
{
    // Payment failed unexpectedly! Rollback the transaction.
    $pdo->rollback();
}
当然,您希望更好地处理此类故障,但这应该能让您很好地演示事务何时合适。

事务与效率无关 事务允许您将多个语句分组到一个原子语句中,这意味着它将完全完成或根本不完成,但不能部分完成。例如,如果您从一个银行帐户中取出钱,然后将其添加到另一个银行帐户,则此操作应完全发生,即帐户a少了$x,帐户b多了$x,或者根本没有。不能发生的是,你从帐户a中取出钱,然后系统崩溃,钱在数字空间中丢失

你不能没有交易 当您使用PDO且未显式启动事务时,则处于自动提交模式。这意味着每次启动查询时,都会启动事务,执行查询并提交事务,这意味着标记为立即完成

还在考虑性能吗? 在一些罕见的情况下,考虑绩效和交易可能是合理的。例如,如果您正在处理大量数据,则可能取决于您的数据库是否能够更快地在一个大型事务中处理所有语句。另一方面,在这种情况下,在事务中执行这些操作可能是合乎逻辑的,因为如果您的程序崩溃,您希望重新运行该程序,它应该从头开始,而不是从上次的某个地方开始。

事务与效率无关 事务允许您将多个语句分组到一个原子语句中,这意味着它将完全完成或根本不完成,但不能部分完成。例如,如果您从一个银行帐户中取出钱,然后将其添加到另一个银行帐户,则此操作应完全发生,即帐户a少了$x,帐户b多了$x,或者根本没有。不能发生的是,你从帐户a中取出钱,然后系统崩溃,钱在数字空间中丢失

你不能没有交易 当您使用PDO且未显式启动事务时,则处于自动提交模式。这意味着每次启动查询时,都会启动事务,执行查询并提交事务,这意味着标记为立即完成

还在考虑性能吗?
在一些罕见的情况下,考虑绩效和交易可能是合理的。例如,如果您正在处理大量数据,则可能取决于您的数据库是否能够更快地在一个大型事务中处理所有语句。另一方面,在这种情况下,在事务中执行这些操作可能是合乎逻辑的,因为如果您的程序崩溃,您希望重新运行该程序,它应该从一开始就开始,而不是从上次的某个地方开始。

在写入数据库插入时,事务最为重要,如果要运行多个SELECT语句并确保它们看到来自同一点的数据,UPDATE和DELETETransactions也是绝对关键的
按照数据库修改的顺序。如果使用可重复读取或可序列化事务,则可以确保不同事务中插入、更新或删除的影响不会从一次选择的结果中消失,而是在下一次选择中出现。当您写入数据库插入时,事务最为重要,如果要运行多个SELECT语句并确保它们在数据库修改序列中看到来自同一点的数据,UPDATE和DELETETransactions也是绝对关键的。如果使用可重复读取或可序列化事务,则可以确保在不同事务中插入、更新或删除的影响不会从一个选择的结果中消失,而是出现在下一个选择的结果中。