gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:48 26 4
gpt4 key购买 nike

我以前用过

<?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条记录,没有任何错误。这是否意味着真的不需要手动使用事务。因为没有冲突。

最佳答案

您不需要为此进行交易。

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

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

  • 首先从一个表中删除

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

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

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

关于php - 使用InnoDB引擎在mysql中插入单行时是否需要事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18801578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com