1 插入XML数据
方法1:直接使用insert
我们可以以如下方式往表person_table插入数据:
示例1:往person_table中插入张三和李四的个人信息
mysql> insert into person_table(info) values('
insert into person_table(info) values('
使用这种方式的一种变体为事先将xml存放在文件里,然后采用函数load_file导入。
方法2:Load XML
在MySQL6.0里,增加了一个新的LOAD XML语法(见“MySQL6.0 Reference Manual 12.2.7. LOAD XML Syntax”)。比如有如下xml文件:
2 <list>
3 <person>
4 <id_card>888</id_card>
5 <name>王五</name>
6 <phone>11891233</电话号码>
7 <phone>21893333</电话号码>
8 </person>
9 <person>
10 <id_card>999</id_card>
11 <name>王李无</name>
12 <phone>31891233</电话号码>
13 </person>
14 </list>
通过使用如下命令即可导入xml数据:
示例2:将my.xml文件中的数据导入people_table
mysql> load xml local infile 'my.xml' into table people_table rows identified by ' person
Query OK, 2 rows affected (0.09 sec)
mysql> select * from people_table;
+----+---------+--------+
| id | id_card | name |
+----+---------+--------+
| 1 | 888 | 王五 |
| 2 | 999 | 王李无 |
+----+---------+--------+
两种导入方法各有优缺点。第一种方法采用用varchar即字符串形式存储xml数据,使得存储效率较低,检索速度慢。第二种方法采用分解的方法,将原来的xml数据拆分成关系型的数据,原数据的结构已不再保持;且随着xml结构变得复杂,分解也变得困难;其次,最新的MySQL6.0也只支持3种特定形式的XML类型,显然还远远不够;由于原本统一的数据分散在两个表中(像本文中个人信息的phone只能另外用表phone_table存储),查询时就不得不进行连接,随着XML数据变得复杂,分解的表就会越多,会严重影响查询时的速度。另外,两种方法也都不支持对导入的XML数据进行验证。这两种方法在其他诸多大型数据库中也还在使用,但随着诸多大型数据库陆续支持原生态xml存储,存储和访问xml数据变得更加简单和富有效率!我们希望MySQL在未来能够更好地支持xml。