2010-11-09 50 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>