繁体   English   中英

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

[英]Is transaction needed when insert single line in mysql with InnoDB engine?

我曾经用

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

但是,今天我在同一张表中运行了两个insert 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条记录,没有任何错误。 这是否意味着确实不需要手动使用事务。 由于没有冲突。

您不需要为此进行交易。

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

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

  • 首先从一张桌子上移走

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

如果此过程在两者之间被中断,那么钱就消失了。 那不是故意的,您可能希望能够回滚。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM