Mysql cftransaction未回滚创建表出错

Mysql cftransaction未回滚创建表出错,mysql,coldfusion,transactions,coldfusion-9,Mysql,Coldfusion,Transactions,Coldfusion 9,因此,这可能是我理解cftransaction标记的一个根本性错误 我有一堆Create Table SQL语句,一个接一个,其中一个有一个错误,它们被包装在一个巨大的cftransaction中,但是当错误发生时,它不会回滚Create语句 <cfset variables.x = 0> <cftry> <cftransaction action="begin"> <cfquery name="variables.qTables" dataso

因此,这可能是我理解
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>

创建表“dev\u db”。`tbl\u条目\u导入`(
`p_id`int(11)默认为空,
`p_Title`varchar(255)默认为空,
`p_FirstName`varchar(255)默认为空,
`p_unique_email`varchar(255)默认为空,
主键(`p_ID`),
唯一键'p\u UNIQUE\u email\u UNIQUE'('p\u UNIQUE\u email`)
)ENGINE=InnoDB默认字符集=utf8;
创建表“dev\u db”。`tbl\u entry2office\u import`(
`entryID`int(11)不为NULL默认值为'0',
`officeID`int(11)不为空默认值“0”
主键(`entryID`)
)ENGINE=InnoDB默认字符集=utf8 COLLATE=utf8\U unicode\U ci;

因此,在第二个
cfquery
(这会导致错误)之后,我希望第一个
cfquery
中的表不存在于我的模式中,但目前它会存在。

CREATE table
语句导致隐式提交,根据文档:::

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

定义或修改数据库对象的数据定义语言(DDL)语句。改变数据库。。。升级数据目录名称、ALTER事件、ALTER过程、ALTER服务器、ALTER表、创建数据库、创建事件、创建索引、创建过程、创建服务器、创建表、删除数据库、删除事件、删除索引、删除过程、删除服务器、删除表、重命名表、截断表


(我的重点是亚当的回答。如果需要在catch块中放入drop语句,您可以自己清理。在其他事务性新闻中,要警惕truncate。就在亚当张贴的街区里。有些人从表中截断而不是删除。这是快速的,但不是事务性的。