10bet网址
MySQL 5.6リファレンスマニュアル
下载本手册
PDF(美国Ltr)- 26.8 mb
PDF (A4)- 26.8 mb
HTML下载(TGZ)- 7.2 mb
HTML下载(Zip)- 7.2 mb


13.2.7 load XML構文

加载XML文件[low_priority | concurrent] [local] infile 'file_name' [replace | ignore] into table [db_name)tbl_name(分区(partition_name,…)][字符集charset_name用'<标识的行tagname> '][忽视数量{lines | rows}] [(column_or_user_var,…)][集col_nameexpr,……)

加载XMLステトメントは,xmlファ。file_nameは,リテラル文字列として指定する必要があります。オプションの句内のtagnameもリテラル文字列として指定し,山括弧(<および>で囲む必要があります。

加载XMLは,xml出力モドでのmysqlクラ()——xmlオプションを使用したクラ和アントの起動)を補完するものとして機能します。テーブルからXMLファイルにデータを書き込むには,システムシェルから次のようなコマンドを使用します。

shell> mysql——xml -e 'SELECT * FROM mytable' > file.xml

そのファ邮箱ルをテ邮箱ブルに読み戻すには,加载XML文件を使用します。デフォルトでは,行> <要素は,デタベステブル行と同等であると見なされます。これは,句を使用して変更できます。

このステトメントは,次の3形式をサポXML形式をサポトします。

  • 属性としてのカラム名と,属性値としてのカラム値:

    <column1= "value1column2= "value2“…/ >
  • タグとしてのカラム名と,これらのタグの内容としてのカラム値:

    <> <column1>value1column1> <column2>value2column2> 行>
  • カラム名は<字段>タグの的名字属性で,値はこれらのタグの内容:

     value1 value2> < /字段> < /行

    これは,, mysqldumpなどのほかのMySQL MySQLルによって使用される形式です。

同じXMLファ3。e .ンポトルチンは各行の形式を自動的に検出し,それを正しく解釈します。タグは,タグまたは属性名とカラム名に基づいて照合されます。

次の句は,基本的に加载XMLに対して加载数据に対する場合と同じように機能します。

  • LOW_PRIORITYまたは并发

  • 当地的

  • 取代または忽略

  • 分区

  • 字符集

  • column_or_user_var,……)

これらの句の詳細は,セクション13.2.6 " load data infile構文"を参照してください。

忽略数量または忽略数量句を指定すると,xmlファereplicationル内の最初の数量行がスキップされます。これは,加载数据ステトメントの忽略……行句に類似しています。

このステートメントがどのように使用されるかを示すために,次のように作成されたテーブルがあるとします。

使用测试;CREATE TABLE person (person_id INT NOT NULL PRIMARY KEY, fname VARCHAR(40) NULL, lname VARCHAR(40) NULL, created TIMESTAMP);

さらに,このテブルが最初は空であるとします。

ここで,次に示すような内容を持person.xmlがあるとします。

<?xml version = " 1.0 " ?>    MikaelRonström LarsThalmann 5Tomas Ulin 6Martin Sköld 

例として示したこのファereplicationルには,前に説明した許可される各XML形式が表されています。

person.xml内のデタをテ。

mysql> LOAD XML LOCAL INFILE 'person. XML '——> INTO TABLE person -> ROWS IDENTIFIED BY '';查询OK, 6 rows affected (0.00 sec) Records: 6 Deleted: 0 skip: 0 Warnings: 0

ここでは,person.xmlがMySQLデタディレクトリ内に存在することを前提にしています。このファからない場合は,次のエラ。

错误2 (HY000):文件“/person.xml”未找到(错误代码:2)

由''标识的行句は,xmlファereplicationル内の各<人>要素が,このデ。この場合,これは测验デタベス内のテブルです。

サバからの応答でわかるように,test.personテブルには6行が。これは,単純な选择ステトメントで確認できます。

SELECT * FROM person;+-----------+--------+------------+---------------------+ | person_id |帧| lname |创建  | +-----------+--------+------------+---------------------+ | 1 | Pekka | Nousiainen | 2007-07-13 16:18:47 | | 2 |乔纳斯| Oreland | 2007-07-13 16:18:47 | | 3 |米凯尔| Ronstrom | 2007-07-13 16:18:47 | | 4 | Lars | Thalmann | 2007-07-13 16:18:47 | | 5 |托马斯|胰岛素| 2007-07-13 16:18:47 | | 6 | | Skold教授马丁| 2007-07-13 16:18:47  | +-----------+--------+------------+---------------------+ 6行Set (0.00 sec)

このセクションの前の方で説明したように,許可される3つのXML形式のいずれかまたはすべてを1つのファイルに含め,それを加载XMLを使用して読み取ることができます。

上の操作の逆,つまり,MySQLテーブルデータのXMLファイルへのダンプは,次に示すように,システムシェルからMySQLクライアントを使用して実現できます。

注記

——xmlオプションを指定すると,mysqlクラereplicationアントは,その出力としてXML形式を使用します。- eオプションを指定すると,クライアントはそのオプションの直後にあるSQLステートメントを実行します。

shell> mysql——xml -e“SELECT * FROM test.”人”>人-dump.xml shell> cat person-dump.xml    1 Pekka Nousiainen 2007-07-13 16:18:47   2 Jonas Oreland 2007-07-13 16:18:47   3 Mikael Ronström 2007-07-13 16:18:47   4 Lars Thalmann 2007-07-13 16:18:47   5 Tomas Ulin 2007-07-13 16:18:47   6 Martin Sköld 2007-07-13 16:18:47  

次のように,のコピーを作成したあと,ダンプファイルを新しいテーブルにインポートすることによって,このダンプが有効であることを確認できます。

mysql>使用测试;创建表person2查询OK, 0 rows affected (0.00 sec) mysql> LOAD XML LOCAL INFILE ' people -dump. XML ' -> INTO TABLE person2;查询OK, 6行影响(0.01秒)记录:6删除:0跳过:0警告:0 mysql> SELECT * FROM person2;+-----------+--------+------------+---------------------+ | person_id |帧| lname |创建  | +-----------+--------+------------+---------------------+ | 1 | Pekka | Nousiainen | 2007-07-13 16:18:47 | | 2 |乔纳斯| Oreland | 2007-07-13 16:18:47 | | 3 |米凯尔| Ronstrom | 2007-07-13 16:18:47 | | 4 | Lars | Thalmann | 2007-07-13 16:18:47 | | 5 |托马斯|胰岛素| 2007-07-13 16:18:47 | | 6 | | Skold教授马丁| 2007-07-13 16:18:47  | +-----------+--------+------------+---------------------+ 6行set (0.00 sec)

由'<标识的行tagname>”句を使用すると,同じXMLファイルのデータを定義の異なるデータベーステーブルにインポートできます。この例では,次のXMLを含むaddress.xmlという名前のファ邮箱ルがあるとします。

<?xml version = " 1.0 " ?>   Robert Jones 
Mary Smith

ここでも,このセクションで前に定義されたtest.personテブルを使用できます。テブルの既存のすべてのレコドをクリアしたあと,次に示すようにその構造を表示します。

mysql< TRUNCATE person;查询好,0行影响(0.04秒)mysql <显示创建表人\ G  *************************** 1。row *************************** Table: person Create Table: Create Table ' person ' (' person_id ' int(11) NOT NULL, ' fname ' varchar(40) DEFAULT NULL, ' lname ' varchar(40) DEFAULT NULL, ' created ' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (' person_id ')) ENGINE=MyISAM DEFAULT CHARSET=latin1 1 row in set (0.00 sec)

次に,次の创建表ステトメントを使用して,测验デタベス内に地址テブルを作成します。

CREATE TABLE address (address_id INT NOT NULL PRIMARY KEY, person_id INT NULL, street VARCHAR(40) NULL, zip INT NULL, city VARCHAR(40) NULL, created TIMESTAMP);

XMLファeconf . XMLルのデeconf . XMLタをテブルに<人>要素で指定されるように指定する次の加载XMLステトメントを実行します。

mysql> LOAD XML LOCAL INFILE 'address.xml' -> INTO TABLE person -> ROWS IDENTIFIED BY '';查询OK, 2 rows affected (0.00 sec) Records: 2 Deleted: 0 skip: 0 Warnings: 0

选择ステトメントを使用して,レコ。

SELECT * FROM person;+-----------+--------+-------+---------------------+ | person_id |帧| lname |创建  | +-----------+--------+-------+---------------------+ | 1 |罗伯特琼斯| | 2007-07-24 17:37:06 | | 2 |玛丽史密斯| | 2007-07-24 17:37:06  | +-----------+--------+-------+---------------------+ 2行集(0.00秒)

XMLファル内の<地址>要素は,テブル内に対応するカラムがないためスキップされます。

<地址>要素のデタを地址テブルに加载XMLステトメントを使用します。

mysql> LOAD XML LOCAL INFILE 'address. XML ' -> INTO TABLE address -> ROWS IDENTIFIED BY '<地址>';查询OK, 3 rows affected (0.00 sec) Records: 3 Deleted: 0 skip: 0 Warnings: 0

次のような选择ステトメントを使用して,デ。

SELECT * FROM address;+------------+-----------+-----------------+-------+--------------+---------------------+ | 街address_id | person_id | |邮政| |创建城市  | +------------+-----------+-----------------+-------+--------------+---------------------+ | 1 | 1 |磨溪路| 45365 |悉尼| 2007-07-24 17:37:37 | | 2 | 1 |大街| 28681 |泰勒斯威尔| 2007-07-24 17:37:37 | | 3 | 2 |河路| 2007-07-24 | 80239 |丹佛17:37:37 |+------------+-----------+-----------------+-------+--------------+---------------------+ 3行集(0.00秒)

<地址>要素のデタのう,xmlコメントで囲まれているものは。ただし,地址テブルにはperson_idカラムがあるため,各<地址>に対する親の<人>要素のperson_id属性の値は地址テブルにトされます

セキュリティ上の考慮事項加载数据ステートメントと同様に,クライアントホストからサーバーホストへのXMLファイルの転送はMySQLサーバーによって開始されます。理論上は,加载XMLステートメント内でクライアントによって指定されたファイルではなく,サーバーが選択したファイルを転送するようにクライアントプログラムに指示する,パッチが適用されたサーバーを構築できます。そのようなサーバーは,クライアントユーザーが読み取りアクセス権を持つクライアントホスト上のすべてのファイルにアクセスできます。

Web環境では、クラeconfアントは通常、WebサMySQLに接続します。MySQLサバに対して任意のコマンドを実行できるユザは本地加载XMLを使用して、Webサーバープロセスが読み取りアクセス権を持つどのファイルでも読み取ることができます。この環境では,そのクライアントはMySQLサーバーに対して,Webサーバーに接続するユーザーによって実行されているリモートプログラムではなく,実際にWebサーバーです。

——local-infile = 0または——local-infile =了を使用してサーバーを起動することによって,クライアントからのXMLファイルのロードを無効にすることができます。このオプションはまた、クラ以及アントセッションの期間中は加载XMLを無効にするようにmysqlクラ邮箱アントを起動する場合にも使用できます。

クライアントがサーバーからXMLファイルをロードしないようにするために,対応するMySQLユーザーアカウントには文件権限を付与しないようにするか,またはクライアントユーザーアカウントがすでにこの権限を持っている場合は取り消してください。

重要

文件権限を取り消した(または,最初から付与しない)場合,そのユ,ザ,は加载XML文件ステトメント(およびLOAD_FILE ()関数)を実行できなくなるだけです。加载XML本地文件の実行は妨げられません。このステトメントを禁止するには,サアントを——local-infile =了で起動する必要があります。

まり,文件権限は,そのクラ。そのクラopenstackアントがロopenstackカルファopenstackルシステム上のファopenstackルを読み取れるかどうかには関係しません。

テブルロックを採用したストレジエンジン(MyISAMなど)を使用しているパティション化されたテブルの場合,加载XMLはどのパティションロックもプルニングできません。これは,行レベルロックを採用したストレージエンジン (InnoDBなど)を使用しているテブルには適用されません。詳細は,セクション19.6.4 "パティショニングとロック"を参照してください。