2010-11-09 52 views
2

我有一个MySQL数据库,我想到底有像这样的XML文件:提取MySQL表列名打印XML

<user> 
    <column>id</column> 
    <column>name</column> 
    <column>password</column> 
</user> 
<dept> 
    <column>id</column> 
    <column>name</column> 
    <column>code</column> 
</dept> 

没有做输出格式化部分我敢肯定,我可以用awk或其他方法做到,但是可以从模式文件中获取列名。我迷路了 ?

回答

1

拿到表名:

Select `table_name` FROM `information_schema`.TABLES 

,然后从每个表中的列:

DESCRIBE `table_name`; 

SHOW COLUMNS FROM `table_name`; 
1

这将产生两个字段的文本文件:表名称和列名称

SELECT TABLE_NAME, COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA='YourDatabase' 
ORDER BY COLUMN_NAME; 

,那么你可以写一个简单的awk脚本:

BEGIN {table_name = -1;} 
    { 
     if (table_name != $1) { 
      if (table_name != -1) 
       printf("</%s>\n", table_name); 
      table_name = $1; 
      printf("<%s>\n", table_name); 
     } 
     printf("\t<column>%s</column>\n",$2); 
    } 
END { printf("</%s>\n", table_name); } 
2

的另一种方式做到这一点是使用mysqldump --xml option - 输出为你勾勒出上面什么不同,但没有你不能事后变换...以下是架构数据如何为您寻找(如果您只需要架构,您还可以使用--no-data)

<?xml version="1.0"?> 
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<database name="example"> 
<table_structure name="user"> 
<field Field="id" Type="int(11)" Null="NO" Key="PRI" Extra="auto_increment" /> 
<field Field="name" Type="varchar(128)" Null="NO" Key="" Default="" Extra="" /> 
<field Field="password" Type="varchar(128)" Null="NO" Key="" Default="" Extra="" /> 
</table_structure> 
</database> 
</mysqldump>