取消 MySQL InnoDB 中的事务而不是提交或回滚
cancel a transaction in MySQL InnoDB instead of commit or rollback
我在 MySQL InnoDB 数据库中使用事务来执行 2 次插入。但是,如果第一次插入失败,我想简单地 "cancel" 事务。 "cancel" 交易有没有比使用 commit
或 rollback
更好的方法?
例如,在 php 中,我正在执行以下操作:
$connection->beginTransaction();
$affectedRows = $tableOne->insertIgnore('example data');
if ($affectedRows == 0) {
$connection->rollback();
} else {
$tableTwo->insert('more example data');
$connection->commit();
}
如您所见,我正在使用rollback
取消交易,但这是用词不当,因为实际上没有什么可以回滚。
确实没有取消交易的概念。相反,您需要执行 rollback
。或者,您也可以什么都不做。如果连接对象在超出范围时有未提交的事务,或者以其他方式关闭,事务将自动回滚。
换句话说,如果没有什么可以回滚就没关系,因为在引擎盖下,数据库驱动程序会优雅地处理这种情况。
我在 MySQL InnoDB 数据库中使用事务来执行 2 次插入。但是,如果第一次插入失败,我想简单地 "cancel" 事务。 "cancel" 交易有没有比使用 commit
或 rollback
更好的方法?
例如,在 php 中,我正在执行以下操作:
$connection->beginTransaction();
$affectedRows = $tableOne->insertIgnore('example data');
if ($affectedRows == 0) {
$connection->rollback();
} else {
$tableTwo->insert('more example data');
$connection->commit();
}
如您所见,我正在使用rollback
取消交易,但这是用词不当,因为实际上没有什么可以回滚。
确实没有取消交易的概念。相反,您需要执行 rollback
。或者,您也可以什么都不做。如果连接对象在超出范围时有未提交的事务,或者以其他方式关闭,事务将自动回滚。
换句话说,如果没有什么可以回滚就没关系,因为在引擎盖下,数据库驱动程序会优雅地处理这种情况。