MySQL - 加载 XML 语句

Table of content


LOAD XML 语句

使用 LOAD XML 语句,您可以将 XML 文件的内容插入到 MySQL 表中。如果您使用 LOCAL 子句,则可以将本地文件的内容上传到表中。

语法

以下是 LOAD XML 语句的语法:

LOAD DATA
   [LOCAL]
      INFILE 'file_name'
      [REPLACE | IGNORE]
      INTO TABLE table_name
      [ROWS IDENTIFIED BY '<tagname>']
      [IGNORE number {LINES | ROWS}]
      [(field_name_or_user_var
         [, field_name_or_user_var] ...)]
      [SET col_name={expr | DEFAULT}
         [, col_name={expr | DEFAULT}] ...]

您可以通过以下三种方式之一创建 XML 文件:

<row column1="value1" column2="value2" .../>
Or,
<row>
   <column1>value1</column1>
   <column2>value2</column2>
</row>
Or,
<row>
   <field name='column1'>value1</field>
   <field name='column2'>value2</field>
</row>

示例

假设我们使用 CREATE 语句创建了一个表,如下所示:

CREATE TABLE EMPLOYEE( MySQL LOAD XML Statement
   FIRST_NAME CHAR(20) NOT NULL,
   LAST_NAME CHAR(20),
   AGE INT,
   INCOME INT);

如果我们有一个名为 data.xml 的文件,其内容如下:

<row>
   <FIRST_NAME>krishna</FIRST_NAME>
   <LAST_NAME>sharma</LAST_NAME>
   <AGE>19</AGE>
   <INCOME>2000</INCOME>
</row>
<row>
   <FIRST_NAME>raj</FIRST_NAME>
   <LAST_NAME>Kandukuri</LAST_NAME>
   <AGE>20</AGE>
   <INCOME>7000</INCOME>
</row>
<row>
   <FIRST_NAME>ramya</FIRST_NAME>
   <LAST_NAME>ramapriya</LAST_NAME>
   <AGE>25</AGE>
   <INCOME>5000</INCOME>
</row>
<row>
   <FIRST_NAME>Alexandra</FIRST_NAME>
   <LAST_NAME>Botez</LAST_NAME>
   <AGE>26</AGE>
   <INCOME>2000</INCOME>
</row>

以下查询将 data.xml 文件的内容加载到上面创建的表中:

load xml infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/data.xml" 
into table employee ROWS IDENTIFIED BY '<row>';

验证

如果您验证 Employee 表的内容,您可以观察到其中的记录如下:

SELECT * FROM EMPLOYEE;

输出

上述 mysql 查询生成以下输出:

FIRST_NAME LAST_NAME AGE INCOME
krishna sharma 19 2000
raj Kandukuri 20 7000
ramya ramapriya 25 5000
Alexandra Botez 26 2000

SET 子句

在使用 LOAD XML 语句时,您需要确保 xml 文件中的标签名称与表列的名称相同,否则会发生错误。

在 LOAD XML 语句中,您可以将文件中的值视为用户变量,并使用 SET 子句将它们分配为表的列值。

示例

假设我们使用 CREATE 语句创建了一个名为 EMP 的表,如下所示:

CREATE TABLE EMP (FIRSTNAME VARCHAR(15), 
DEPARTMENT VARCHAR(25), SALARY INT);

假设我们有一个名为 data.xml 的 xml 文件,如下所示:

<row>
   <f_name>Rahman</f_name>
   <dpt>IT</age>
   <sal>5000</income>
</row>
<row>
   <f_name>Ram</f_name>
   <dpt>HR</age>
   <sal>7000</income>
</row>
<row>
   <f_name>Robert</f_name>
   <dpt>SALES</age>
   <sal>9000</income>
</row>
<row>
   <f_name>ramya</f_name>
   <dpt>IT</age>
   <sal>7000</income>
</row>

以下查询使用 SET 子句将 xml 文件的内容读取到 EMP 表中:

load xml infile "C:/ProgramData/MySQL/MySQL Server 
8.0/Uploads/data.xml"into table emp (@f_name, @dpt, @sal)
SET FIRSTNAME=@f_name, DEPARTMENT=@dpt, SALARY=@sal;

验证

执行 LOAD 语句后,您可以验证 EMP 表的内容,如下所示:

SELECT * FROM EMP;

输出

以下是上述查询的输出:

FIRSTNAME DEPARTMENT SALARY
Rahman IT 5000
Ram HR 7000
Robert SALES 9000
ramya IT 7000

如果您使用 LOAD XML 语句将 .xml 文件的内容导入到表中,则仅导入与 person 表中列对应的值,其他值将被跳过。

示例

假设我们使用 CREATE 语句创建了一个名为 TEST 的表,如下所示:

CREATE TABLE TEST (name VARCHAR(15), sal INT);

如果我们有一个如下所示的 xml (data.xml) 文件:

<rowglt;
   <nameglt;Rahman</nameglt;
   <dptglt;IT</ageglt;
   <salglt;5000</incomeglt;
   <cityglt;Hyderabad</cityglt;
</rowglt;
<rowglt;
   <nameglt;Ram</nameglt;
   <dptglt;HR</ageglt;
   <salglt;7000</incomeglt;
   <cityglt;Vishakhapatnam</cityglt;
</rowglt;
<rowglt;
   <nameglt;Robert</nameglt;
   <dptglt;SALES</ageglt;
   <salglt;9000</incomeglt;
   <cityglt;Chennai</cityglt;
</rowglt;
<rowglt;
   <nameglt;ramya</nameglt;
   <dptglt;IT</ageglt;
   <salglt;7000</incomeglt;
   <cityglt;Delhi</cityglt;
</rowglt;

以下查询将 data.xml 中的数据加载到 test 表中。

load xml infile "C:/ProgramData/MySQL/MySQL Server 
8.0/Uploads/data.xml" into table TEST ROWS IDENTIFIED BY '<row>';

验证

执行 LOAD 语句后,您可以验证 test 表的内容,如下所示:

SELECT * FROM TEST;

输出

上述查询生成以下输出:

name sal
Rahman 5000
Ram 7000
Robert 9000
ramya 7000
广告

© . All rights reserved.