mysql - 根据 CFDBINFO 标签返回的内容创建 mysql 表所需的代码指南

标签 mysql coldfusion

使用以下代码..

到目前为止,我一直尝试从 cfdbinfo 创建 mysql 表,但我缺少一些东西,例如:

  1. 唯一 key
  2. 索引键

这是我的以下尝试,请提供您的改进

<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/

相关文章:

mysql - 迭代游标后从 MySQL 函数返回值

mysql - 我们可以在 MySQL 中为多个表设置一个触发器吗?

mysql - 此查询中的 SQL 错误

iis - 冷聚变 2016 : Can you have a folder in your web root named 'api' or 'rest' ?

ColdFusion hash_hmac256 输出格式/编码

data-structures - ColdFusion:如何检查某个元素是否存在于二维数组中?

php - 无法连接到 xampp mysql 以外的数据库

mysql - 将一列复制到同一张表上的另一列

java - 使用 ColdFusion、Java 或命令行实用程序将网页转换为图像?

mysql - 无法删除或更新父行 : a foreign key constraint in grails with mysql