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

标签 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 文件,没有任何操作。这很简单:

<?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/

相关文章:

mysql - 从与给定类别 ID 关联的所有子类别级别中选择列表

php - method_exists 在父类 php

java - 错误的字符串值 - JOOQ - Java

php - 从另一个类 PHP 调用函数中的函数

php - Double Count Select 返回错误结果

mysql - 使用过滤器上传 csv 文件

mysql - 如何根据同一表中另一列的数据填充一列?

mysql - Sum 函数仅返回一层层次结构

php - 用户注销时如何使PHP中的页面过期

php - 如何用MYSQL数据制作日历?