0

我以前用

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

但是,今天我在同一个表中运行两个插入 php 文件,没有任何操作。这很简单,例如:

<?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();
?>

我在两个不同的控制台中运行两个 php 文件。然后我得到了 200,000 条记录,没有任何错误。这是否意味着真的不需要手动使用事务。因为没有冲突。

4

1 回答 1

4

您不需要为此进行交易。

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

一个简单而好的例子是两张桌子之间的汇款:

  • 首先从一个表中删除

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

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

但是,在您的情况下,所有语句都是“原子的”,这意味着它们成功或失败,但数据库状态始终是“干净的”。如果是单个或多个客户端运行语句,这无关紧要。

于 2013-09-14T12:11:14.403 回答