使用以下代码..
到目前为止,我一直尝试从 cfdbinfo 创建 mysql 表,但我缺少一些东西,例如:
- 唯一 key
- 索引键
这是我的以下尝试,请提供您的改进
<cffunction access="public" name="advancedbackup" returntype="any">
<cfargument name="structform" default="" required="no" type="struct">
<cfset var myStruct = "">
<cfset getInfo = getBackupDatabaseTables('szone')>
<cfset getTableEngines = valueList(getInfo.name)>
<cfdbinfo datasource="supportzone" name="getColumns" type="columns" table="#ListLast(arguments.structform.ID,'~')#" />
<cfsavecontent variable="tableName">
CREATE TABLE `<cfoutput>#ListLast(arguments.structform.ID,'~')#</cfoutput>`(
</cfsavecontent>
<cfsavecontent variable="tableContents">
<cfloop query="getColumns">
<CFOUTPUT> `#COLUMN_NAME#`
<cfif COLUMN_SIZE GT 255 AND TYPE_NAME NEQ 'varchar'>
text
<cfelseif TYPE_NAME IS 'datetime'>
datetime
<cfelseif TYPE_NAME IS 'timestamp'>
timestamp
<cfelse>
#TYPE_NAME#(#COLUMN_SIZE#)
</cfif>
<cfif IS_PRIMARYKEY IS 'Yes'>
AUTO_INCREMENT
</cfif>
,
<cfif IS_PRIMARYKEY IS 'No'>
DEFAULT
<cfif COLUMN_DEFAULT_VALUE IS ''>
NULL,
<cfelse>
'#COLUMN_DEFAULT_VALUE#'
<cfif IS_NULLABLE IS 'No'>
NOT NULL,
<cfelse>
NULL,
</cfif>
</cfif>
</cfif>
</CFOUTPUT>
</cfloop>
<cfoutput> PRIMARY KEY (`
<cfif getColumns.IS_PRIMARYKEY IS 'Yes'>
#getColumns.COLUMN_NAME#
</cfif>
`)
) ENGINE =
<cfif ListFindNoCase(getTableEngines,ListLast(arguments.structform.ID,'~'),',') NEQ 0>
#getInfo.Engine# AUTO_INCREMENT=#getInfo.AUTO_INCREMENT#
</cfif>
; </cfoutput>
</cfsavecontent>
<cfset fTable = tableName & tableContents>
<cfdump var="#ftable#" abort>
基本上,getBackupDatabaseTables 正在获取以下查询
SHOW TABLE STATUS
from szone
最佳答案
您似乎正在尝试将现有表的结构复制到新表。我会在您的数据库中创建一个模板表,例如 backup_tbl_tmp。它可以拥有您需要的所有键和索引。然后创建一个新表(在 MySQL 中,我假设您使用...)只需执行以下操作:
CREATE TABLE new_table_name LIKE backup_tbl_tmp;
对于 MSSQL 使用:
SELECT * INTO new_table_name FROM backup_tbl WHERE 0=1;
请注意,在 MSSQL 中,索引不会被复制。如果要将数据复制到新表中,请删除 WHERE 子句。
关于mysql - 根据 CFDBINFO 标签返回的内容创建 mysql 表所需的代码指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22606513/