Загрузка XML-файла в MySQL с получением дополнительных строк

#mysql #xml

#mysql #xml

Вопрос:

Я запускал это для других файлов и никогда не видел этого раньше и не могу сказать, что происходит.

Вот моя структура таблицы:

 DROP TABLE IF EXISTS Searchword; COMMIT;
CREATE TABLE Searchword ( 
  id INT NOT NULL AUTO_INCREMENT
, SearchwordID int 
, ConceptID int 
, Searchword nvarchar(80)
, CreateDate datetime 
, LastDate datetime 
, LanguageID int 
, PRIMARY KEY (id) 
); COMMIT;
  

Вот мой XML:

 <?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="Searchword.xsd" generated="2020-10-09T10:05:52">
    <Searchword>
        <SearchwordID>1</SearchwordID>
        <ConceptID>1</ConceptID>
        <Searchword>Tacos</Searchword>
        <CreateDate>2020-07-15T09:45:34</CreateDate>
        <LastDate>2020-07-15T09:45:34</LastDate>
        <LanguageID>1</LanguageID>
    </Searchword>
    <Searchword>
        <SearchwordID>2</SearchwordID>
        <ConceptID>1</ConceptID>
        <Searchword>Beef Tacos</Searchword>
        <CreateDate>2020-07-15T09:42:50</CreateDate>
        <LastDate>2020-07-15T09:42:50</LastDate>
        <LanguageID>1</LanguageID>
    </Searchword>
    <Searchword>
        <SearchwordID>3</SearchwordID>
        <ConceptID>1</ConceptID>
        <Searchword>Tacos Supreme</Searchword>
        <CreateDate>2020-07-15T09:42:50</CreateDate>
        <LastDate>2020-07-15T09:42:50</LastDate>
        <LanguageID>1</LanguageID>
    </Searchword>
</dataroot>
  

Мой код загрузки:

 LOAD XML LOCAL INFILE 'C:/filelocation/Searchword.xml' 
INTO TABLE Searchword 
ROWS IDENTIFIED BY '<Searchword>'; 
;COMMIT; 
  

Но вот мои результаты:

Результаты

Я не могу понять, почему появляются выделенные строки выше?

Использование версии 8.0.17

Ответ №1:

это потому, что у вас есть

Поисковое слово дважды в вашем xml показывает, где находятся **

 **<Searchword>**
    <SearchwordID>1</SearchwordID>
    <ConceptID>1</ConceptID>
    **<Searchword>Tacos</Searchword>**
    <CreateDate>2020-07-15T09:45:34</CreateDate>
    <LastDate>2020-07-15T09:45:34</LastDate>
    <LanguageID>1</LanguageID>
</Searchword>
  

Итак, более сложная вещь, которая также является строкой

Комментарии:

1. Grr спасибо, что объяснили мне причину. Я изменил один из них, и он работал отлично. Спасибо!

Ответ №2:

Просто запустите тот же оператор без ROWS IDENTIFIED BY '<Searchword>';

 LOAD XML LOCAL INFILE 'C:/filelocation/Searchword.xml' 
INTO TABLE Searchword 
;COMMIT;