У нас есть код, я, поддерживая, где у меня есть что-то вроде этого:транзакции следующие Откат
<cftransaction>
<cftry>
... do some stuff here which may throw an exception ...
<cftransaction action="commit">
<cfcatch>
<cftransaction action="rollback">
<cfif someCondition>
<cfset someFunctionThatAffectsTheDB() />
<cftransaction action="commit" />
</cfif>
<cfcatch>
<cftry>
</cftransaction>
Я немного хитрый фиксации в улове, что происходит после отката. Я искал interwebs для информации о том, что может произойти в таком случае, но пока ничего не нашел, что бы сказать, что произойдет, если вы попытаетесь совершить сделку после отката внутри одного и того же блока транзакций. Кто-нибудь знает, что это будет делать и хорошо ли это делать или плохо?
(Причина, по которой я прошу, состоит в том, что у нас есть состояние данных в нашем db, которое, как я думаю, не должно быть возможным, и мне интересно, не является ли поведение commit-after-rollback неопределенным и тонким и может вызвать Я вижу.)
Специфические значения зависят от db. Какие dbms и версия вы используете? (Всегда полезно включать эту информацию с любыми вопросами db). Я считаю, что с SQL Server открытие 'cftransaction' (без каких-либо действий) запускает [' SET IMPLICIT_TRANSACTION ON'] (http://technet.microsoft.com/en-us/library/aa259220%28v=SQL.80%29 .aspx), которая определяет поведение последующих действий 'COMMIT' и' ROLLBACK' в этом контексте. Но снова вам нужно проверить документацию своей базы данных на предмет специфики. – Leigh
Я верю, что происходит, когда откаты откатываются назад, а затем фиксация в catch будет совершать любые операции db, которые произошли после откат. На самом деле это довольно просто, я думаю, подумав об этом немного. – jinglesthula
Да, это то, что предлагает документация SQL Server. Вы всегда можете проверить это с помощью SQL Profiler и/или включить отладку в вашем DSN и проверить файлы журнала. – Leigh