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
廣告