XML形式のデータをMySQLにロードする


Q. mysqldumpで生成したxml形式のダンプデータをリストアしたい。
A. LOAD XML 構文を使えばできる。

mysqlを起動し、ログイン

$ ls  #xmlファイルが存在することを確認
person.xml
$ mysql.server start 
$ mysql -u [ユーザ名] -p 

XMLファイルの中身はこんな感じ(mysqldumpで作成できる)

person.xml
<?xml version="1.0"?>
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<database name="practice">
    <table_structure name="person">
        <field Field="id" Type="int(11)" Null="YES" Key="" Extra="" Comment="" />
        <field Field="name" Type="varchar(255)" Null="YES" Key="" Extra="" Comment="" />
        <options Name="person" Engine="InnoDB" Version="10" Row_format="Dynamic" Rows="2" Avg_row_length="8192" Data_length="16384" Max_data_length="0" Index_length="0" Data_free="0" Create_time="2019-02-02 14:49:49" Update_time="2019-02-02 14:55:38" Collation="utf8_general_ci" Create_options="" Comment="" />
    </table_structure>
    <table_data name="person">
    <row>
        <field name="id">1</field>
        <field name="name">usera</field>
    </row>
    <row>
        <field name="id">2</field>
        <field name="name">userb</field>
    </row>
    </table_data>
</database>
</mysqldump>

XMLファイルをMySQLにロードする

personテーブルのデータをリストアする

mysql> USE [データベース名];
mysql> TRUNCATE person; 
mysql> LOAD XML LOCAL INFILE 'person.xml' INTO TABLE person;

結果

mysql> SELECT * FROM person;

+------+-------+
| id   | name  |
+------+-------+
|    1 | usera |
|    2 | userb |
+------+-------+
2 rows in set (0.01 sec)

参考