Colorful Life2010

ColdFusion中的事务处理功能
Weather:早上下雷雨

  ColdFusion支持事务处理,这个功能非常实用,ACCESS数据库不支持事务处理功能,有了CF的这个功能在一些数据处理上就非常地方便。而一般的企业级数据库,像MS SQL都是支持事务处理的。所谓事务处理就是在一次数据库的多步处理中,如果中间环节的任何一步出错,那么就回滚(Roll Back)到最初的状态,也就是说相当于刚才的前几步数据库操作都撤消。

<CFTRANSACTION>
< CFQUERY NAME="test" DATASOURCE="cfsnippets">
Insert Into Employees(FirstName,lastname,email,phone,department)
Values('Qi','king','[email protected]','1234567','Technical')
< /CFQUERY>
< CFQUERY NAME="test" DATASOURCE="cfsnippets">
Select MAX(Emp_id) as number_id
From Employees
< /CFQUERY>
< /CFTRANSACTION>
插入数据成功!
你新插入的id是:
< cfoutput query="test">#number_id#</cfoutput>

  上面的这一段代码,其中最主要的部分是应用了两个cfquery的标签的组合,实现了数据插入和最新插入的员工id的查询。其中第一个cfquery插入了一组记录到Employees这个table里去,除了没有处理emp_id这个默认的员工id的自增主键之外,其他的几个字段都对应给予了插入。在插入之后,第二个cfquery做的是将刚刚插入的记录的emp_id给查询出来。比如我们要开发一个内部网的员工模块,有可能在做了新员工的输入之后,马上系统要告知该员工的工号,就可以采用这种方式。但是会有一个问题,如果你在请求server做insert的同时,有另外一个人正好刚刚做完insert,正要查询出他的id,这样有可能查出的id是你的,因为这时候,系统有可能响应给对方你刚做完insert的记录的emp_id的值。为了避免这样的现象发现,我们在两个cfquery之外使用了Cftransaction这个标签。

  Cftransaction是一个协调事务处理的标签,它把处理不同事务的作为一个整体,如果其中的某一个操作不成功,那么所有的操作都会被服务器回滚。

上面这段代码,对于支持事务处理的企业级数据库还可以简写成

<CFTRANSACTION>
< CFQUERY NAME="test" DATASOURCE="cfsnippets">
Insert Into Employees(FirstName,lastname,email,phone,department)
Values('Qi','king','[email protected]','1234567','Technical') ;
Select MAX(Emp_id) as number_id
From Employees
< /CFQUERY>
< /CFTRANSACTION>
插入数据成功!
你新插入的id是:
< cfoutput query="test">#number_id#</cfoutput>

第一段代码在不支持事务处理的数据库和支持事务处理的数据库中都能使用,而第二段代码就只能在支持事务处理的数据库上用了。

[ColdFusion中的事务处理功能]的回复

Post a Comment~