cftransaction
태그를 이해하는 데있어 근본적인 실패 일 수 있습니다.cftransaction 롤백하지 않음 오류 발생시 테이블 만들기
한 테이블에 여러 개의 Create 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>
그래서 이어 두 번째로 cfquery
(오류가 발생해야하는), 내 스키마에 존재하지 않는 최초의 cfquery
에서 테이블을 기대하지만, 현재는 할 것입니다.
+1. catch 블록에 drop 문을 넣어야 할 필요가있는 경우 직접 정리할 수 있습니다. 다른 트랜잭션 뉴스에서는 잘라내기를 조심해야합니다. Adam이 게시 한 블록에 있습니다. 어떤 사람들은 테이블에서 삭제하는 대신 잘립니다. 이것은 신속하지만 거래가 아닙니다. –