我已经看到了许多不同的cftransaction示例,并阅读了不同的站点,但仍然无法找到确定cftransaction哪些部分必要的明确答案。我要完成的工作非常简单:


开始交易
运行多个插入/更新
完成交易


如果在插入/更新期间的任何时间出现错误,我想回滚事务。这是我过去所做的:

<cftransaction>
 <cftry>
  <!--- multiple insert/update queries --->
 <cfcatch type="any">
  <cftransaction action="rollback">
  <!--- log error, show user message --->
 </cfcatch>
 </cftry>
<cftransaction action="commit">
</cftransaction>


这样对吗?最佳做法是什么?并非所有cftransaction实例都遵循上述示例。有些仅具有开始和结束标签。

我一直看到我的数据库服务器出现问题,并认为不当使用事务可能是问题之一。我在活动监视器中看到大量的set transaction isolation level read committed进程占用大量CPU。

最佳答案

在执行此操作时,“ commit”和“ rollback”行是多余的。只有在您希望提交某些查询而其他查询回滚时,它们才真正有用。由于您不做任何事情,所以您实际上不需要它们。

我通常这样做:

<cftry>
  <cftransaction>
    <!--- multiple insert/update queries --->
  </cftransaction>
  <cfcatch type="database">
    <!--- log error, show user message --->
  </cfcatch>
</cftry>

08-25 18:50