Я использую транзакцию в базе данных MySQL InnoDB для выполнения 2 вставок. Однако, если первая вставка не удалась, я хотел бы просто «отменить» транзакцию. Есть ли хороший подход для «отмены» транзакции вместо использования 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
, Кроме того, вы также можете ничего не делать. Если объект соединения имеет незафиксированную транзакцию, когда он выходит из области видимости, или он закрыт другим способом, транзакция будет автоматически откатываться.
Другими словами, все в порядке, если откатывать нечего, потому что под капотом драйвер БД будет корректно обрабатывать этот случай.
Других решений пока нет …