技术开发 频道

在MySQL中使用XML数据

  1 插入XML数据

  方法1:直接使用insert

  我们可以以如下方式往表person_table插入数据:

  示例1:往person_table中插入张三和李四的个人信息

  mysql> insert into person_table(info) values('111

  张三8189123381893333');

  insert into person_table(info) values('444

  李四8189123381893333');

  使用这种方式的一种变体为事先将xml存放在文件里,然后采用函数load_file导入。

  方法2:Load XML

  在MySQL6.0里,增加了一个新的LOAD XML语法(见“MySQL6.0 Reference Manual 12.2.7. LOAD XML Syntax”)。比如有如下xml文件:  

1 <?xml version="1.0"?>
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。

0
相关文章