Необходимо ли запускать «ОТКАТ» в MYSQL?

#mysql #transactions

#mysql #транзакции

Вопрос:

Я выполнил несколько запросов SQL-оператора между START TRANSACTION ними и COMMIT .

Если что-то пойдет не так, процесс завершится между ними без выполнения COMMIT , и с базой данных ничего не произойдет. Пока все кажется нормальным без выполнения ROLLBACK .

Я сомневаюсь в том, нужно ли бежать ROLLBACK , если случится что-то плохое?

Комментарии:

1. Если что-то пойдет не так, процесс завершится , это абсолютно неверно. Никогда не полагайтесь на неявные действия. Определите надлежащие обработчики выхода и выполните в нем явный ОТКАТ.

2. @Akina Это так верно. Каждая платформа / решение может вести себя немного по-разному в условиях ошибок, и я видел, что транзакции были совершены даже после того, как некоторые ошибки должны были привести к гибели транзакции. Итак, к делу, лучше явно вызвать ОТКАТ и спокойно спать по ночам.

3. @TheImpaler Достаточно представить, что в середине транзакции ссылка была потеряна, а затем восстановлена путем повторного подключения — но это другое соединение… прощай, согласованность!

Ответ №1:

Если вы autocommit отключили, любая не совершенная транзакция всегда откатывается в конце сеанса.

Подробнее об этом можно прочитать в документации

Тем не менее, я бы четко об этом сказал (на всякий случай, если сеанс не завершится, когда «что-то пойдет не так») и вызовите его.

Комментарии:

1. В документации я нашел 1 полезную информацию о rollback том, что «Как ФИКСАЦИЯ, так и ОТКАТ освобождают все блокировки InnoDB, которые были установлены во время текущей транзакции». что я интерпретирую как, если не происходит блокировки InnoDB, иначе запуск ROLLBACK не требуется. В любом случае спасибо за информацию.

2. @mjb ну, MyISAM на самом деле не поддерживает транзакции, так что да, откат в MyISAM не требуется … но ни фиксация, ни транзакция вообще не нужны