При работе с транзакциями базы данных каковы возможные условия (если они есть), которые приведут к завершению окончательного оператора COMMIT
в транзакции, предполагая, что все операторы в транзакции уже выполнены без проблем?
Например, скажем, у вас есть двухфазный или протокол трехфазной фиксации, где вы делаете кучу операторов, а затем дождитесь, пока какой-то мастер-процесс скажет вам, когда будет нормально совершить транзакцию:
-- <initial handshaking stuff>
START TRANSACTION;
-- <Execute a bunch of SQL statements>
-- <Inform master of readiness to commit>
-- <Time passes... background transactions happening while we wait>
-- <Receive approval to commit from master (finally!)>
COMMIT;
Если ваш код попадает в этот окончательный оператор COMMIT и отправляет его в вашу СУБД, можете ли вы когда-нибудь получить сообщение об ошибке (проблема уникальности, полная база данных и т.д.) в этом заявлении? Какие ошибки? Зачем? Как они появляются? Разве это зависит от того, какую СУБД вы запускаете?