Транзакции существуют для ТОЧНОГО решения проблемы, которую вы описываете.Либо все запросы в транзакции завершаются успешно, либо база данных откатывается, как будто ничего не происходит.
Хотя я уверен, что есть люди, которые не согласны со мной, я не фанат использования триггеров или хранимыхпроцедуры для создания программной логики.Не из-за безопасности, а потому, что триггеры становятся скрытым кодом, а не в вашей системе контроля версий (если вы не усердны с миграциями), добавляя логику в запрос, который вы не видите при чтении исходного кода.
А как насчет обработки ошибок?Что вы будете делать в случае сбоя триггера?
Подумайте о следующем человеке, который будет работать над вашим кодом, даже если этот человек - вы, через два года.Простота и ясность всегда окупятся.