cftransaction不回滚创建表错误

Jar*_*ede 2 mysql coldfusion transactions coldfusion-9

所以这可能只是我理解cftransaction标签的根本失败.

我有一堆Create Table SQL语句,一个接一个,在其中一个中有一个错误,这些都包含在一个巨人中cftransaction,但是当错误发生时,它不会回滚create语句.

<cfset variables.x = 0>
<cftry>
<cftransaction action="begin">
    <cfquery name="variables.qTables" datasource="dev_db">
        CREATE  TABLE  `dev_db`.`tbl_entries_import` (  
            `p_id` int( 11  )  default NULL ,
            `p_Title` varchar( 255  )  default NULL ,
            `p_FirstName` varchar( 255  )  default NULL ,
            `p_unique_email` varchar( 255  )  default NULL ,
            PRIMARY  KEY (  `p_ID`  ),
            UNIQUE KEY `p_unique_email_UNIQUE` (`p_unique_email`)
          ) ENGINE  = InnoDB  DEFAULT CHARSET  = utf8;
    </cfquery>
    <cfset variables.x++>
    <cftransaction action="setsavepoint" savepoint="#variables.x#"/>

    <cfquery name="variables.qTables" datasource="dev_db">
        CREATE  TABLE  `dev_db`.`tbl_entry2office_import` (  
            `entryID` int( 11  )  NOT  NULL default  '0',
            `officeID` int( 11  )  NOT  NULL default  '0'
            PRIMARY  KEY (  `entryID`  ) 
        ) ENGINE  = InnoDB  DEFAULT CHARSET  = utf8 COLLATE  = utf8_unicode_ci;
    </cfquery>
    <cfset variables.x++>
    <cftransaction action="setsavepoint" savepoint="#variables.x#"/>
</cftransaction>
<cfcatch>
    <cfloop from="#variables.x#" to="1" index="variables.y" step="-1">
        <cftransaction action="rollback" savepoint="#variables.y#">
    </cfloop>
    <cfdump var="#cfcatch#">
</cfcatch>
</cftry>
Run Code Online (Sandbox Code Playgroud)

所以在第二个cfquery(这应该导致错误)之后,我希望第一个表cfquery在我的模式中不存在,但是目前它会这样做.

Ada*_*ron 6

CREATE TABLE根据文档:" 13.3.3导致隐式提交的语句 ",语句导致隐式提交:

本节中列出的语句(以及它们的任何同义词)隐式结束当前会话中活动的任何事务,就像在执行语句之前已完成COMMIT一样.

定义或修改数​​据库对象的数据定义语言(DDL)语句.ALTER DATABASE ...升级数据目录名称,更改事件,更改程序,更改服务器,更改表,创建数据库,创建事件,创建索引,创建过程,创建服务器,创建表,DROP DATABASE,DROP EVENT,DROP INDEX,DROP过程,DROP SERVER,DROP TABLE,RENAME TABLE,TRUNCATE TABLE.

(我的重点)

  • 给亚当的答案+1.如果需要将drop语句放在catch块中,您可以自己清理.在其他交易新闻中,要警惕截断.这是亚当发布的块.有些人截断而不是从表中删除.这很快但不是交易性的. (3认同)