отменить транзакцию в MySQL InnoDB вместо фиксации или отката

Я использую транзакцию в базе данных 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 отменить транзакцию, но это неправильно, потому что на самом деле нечего откатывать.

0

Решение

Там действительно нет концепции отмены транзакции. Вместо этого вам нужно сделать rollback, Кроме того, вы также можете ничего не делать. Если объект соединения имеет незафиксированную транзакцию, когда он выходит из области видимости, или он закрыт другим способом, транзакция будет автоматически откатываться.

Другими словами, все в порядке, если откатывать нечего, потому что под капотом драйвер БД будет корректно обрабатывать этот случай.

2

Другие решения

Других решений пока нет …