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