Php 使用InnoDB引擎在mysql中插入单行时是否需要事务?

Php 使用InnoDB引擎在mysql中插入单行时是否需要事务?,php,mysql,sql,insert,transactions,Php,Mysql,Sql,Insert,Transactions,我以前用过 <?php $sql = "insert into test (owner) values ('owen')"; $db->autocommit(false); if (!$db->query($sql)) $db->rollback(); else $db->commit(); $db->close(); ?> 此操作不需要事务处理 事务的存在是为了能够回滚对数据库完成了一半的更改。只有当您有一组多个语句更改数据库时,才会

我以前用过

<?php
$sql = "insert into test (owner) values ('owen')";
$db->autocommit(false);
if (!$db->query($sql))
    $db->rollback();
else
    $db->commit();
$db->close();
?>

此操作不需要事务处理

事务的存在是为了能够回滚对数据库完成了一半的更改。只有当您有一组多个语句更改数据库时,才会发生这种情况,而这些语句之间可能会中断。然后,通常只执行了一些语句,从应用程序的角度来看,这些语句可能会使数据库处于不“干净”的状态

一个简单而好的例子是两个表之间的资金转移:

  • 首先是从一张桌子上取下

  • 然后将其添加到第二个表中

如果这一过程在中间中断,钱就消失了。这并不是您的本意,您可能希望能够回滚


然而,在您的情况下,所有语句都是“原子的”,这意味着它们成功或失败,但数据库状态始终是“干净的”。在这种情况下,运行语句的是单个客户机还是多个客户机并不重要

此操作不需要事务处理

事务的存在是为了能够回滚对数据库完成了一半的更改。只有当您有一组多个语句更改数据库时,才会发生这种情况,而这些语句之间可能会中断。然后,通常只执行了一些语句,从应用程序的角度来看,这些语句可能会使数据库处于不“干净”的状态

一个简单而好的例子是两个表之间的资金转移:

  • 首先是从一张桌子上取下

  • 然后将其添加到第二个表中

如果这一过程在中间中断,钱就消失了。这并不是您的本意,您可能希望能够回滚

然而,在您的情况下,所有语句都是“原子的”,这意味着它们成功或失败,但数据库状态始终是“干净的”。在这种情况下,运行语句的是单个客户机还是多个客户机并不重要

<?php
$sql = "insert into test (owner) values ('owen')"; //the other php is the same but replacing 'owen' to 'huhu'
for ($i = 0; $i < 100 * 1000; $i++) {
    $db->query($sql);
}
$db->close();
?>