LOAD DATA を使用して MySQL データベースにデータをインポートする - Simple Talk (2023)

データベース チームと開発チームは、プレーン テキスト ファイルから MySQL データベースにデータをロードすることがよくあります。これらのファイルは、ルックアップ データの追加、テストおよび開発環境のサポート、新しい MySQL インスタンスへの追加、通常のフィードからのデータのロード、またはその他の方法での操作のサポートに使用される場合があります。インポート プロセスを支援するために、MySQL はロード データステートメント。テキスト ファイルから行を読み取り、ターゲット テーブルに挿入します。

この記事では、その使い方を紹介します。ロード データステートメントを使用して、カンマ区切り値 (CSV) ファイルやその他のプレーン テキスト ファイルからデータを追加します。例はかなり基本的なものですが、これらは、ロード データステートメントと、その過程で遭遇する可能性のあるいくつかの問題について説明します。各例では、ローカル システム上のファイルからデータを取得し、そのデータをメーカーのテーブル旅行データベースについては、このシリーズの以前の記事で説明しました。

注: この記事の例は、非常に単純なデータベースとテーブルをホストする MySQL のローカル インスタンスに基づいています。記事の最後のセクション「付録: MySQL 環境の準備」では、システムのセットアップ方法に関する情報が提供され、例のベースとなるデータベースとテーブルを作成するための SQL スクリプトが含まれています。

MySQLサーバーへの接続

テキスト ファイルから MySQL データベースにデータをインポートすること自体は、非常に簡単なプロセスです。多くの場合、操作で最も難しい部分は、確実に実行できるように環境をセットアップすることです。ロード データステートメントを作成し、データをターゲットテーブルにインポートします。 MySQL の他の SQL ステートメントと同様、操作を実行するために必要な権限が付与されている必要があります (このトピックはこの記事の範囲を超えています)。ただし、データをインポートするには、他にも注意すべき問題がいくつかあります。地元オプション。

を作成するときは、ロード データステートメントには、地元オプションをステートメント定義の一部として使用します。このオプションは、ステートメントのセキュリティ要件と、ソース テキスト ファイルがクライアント システムにあるのか、MySQL インスタンスをホストしているサーバーにあるのかを決定します。

  • 指定しない場合は、地元オプションを使用するには、ソース テキスト ファイルが MySQL ホスト上に存在する必要があります。を実行すると、ロード データステートメントを実行すると、MySQL はディレクトリからファイルを直接読み取り、データをターゲット テーブルに挿入します。このアプローチは一般に、地元データがより直接的にロードされるため、オプションです。ただし、正しく接続することははるかに困難です (多くのオンライン ディスカッションのテーマでもあります)。
  • を指定すると、地元オプションを使用するには、ソース テキスト ファイルがクライアント マシン上に存在する必要があります。クライアントはファイルを読み取り、コンテンツをサーバーに送信します。コンテンツは、処理のためにターゲット テーブルにロードされるまで、一時ファイルに保存されます。の地元このオプションは、クライアントと MySQL が同じマシン上にある場合にも機能します。これがこの記事で採用したアプローチです。通常、地元オプション。

この記事の例では、地元オプション。これがないと MySQL の接続要件がより複雑になるだけでなく、十分に文書化されていないため、問題が発生した場合にイライラがさらに増します。接続に関する問題について議論しているさまざまなフォーラムの投稿をチェックしてみると、ロード データこのステートメントをよく読んでみると、多くの場合、投稿に返信した人が、地元さまざまな課題に対する簡単な回避策としてのオプションです。

また、多くのデータベース管理者や開発者にとって、許可されている場合でも、ファイルを MySQL サーバーにアップロードするよりも、クライアント側でソース ファイルを見つける方が望ましいと思います。を使用する場合は、地元オプション、必要ありませんファイル権限を実行するロード データステートメントを実行すると、クライアント アプリケーション (この場合は MySQL Workbench) がアクセスできる任意のローカル フォルダーにソース テキスト ファイルを保存できます。

注: MySQL ドキュメントには次のように記載されています。地元が指定されている場合、ファイルはクライアント ホスト上に存在する必要があります。」ただし、実行できましたロード データを含む声明地元オプションを使用して、ネットワーク上の他のシステムからデータを取得しました。 1 台目は別の Mac コンピューターで、もう 1 台は Windows 11 仮想マシンでした。私はこの機能をそれ以上テストしていません。

を使用するときは、地元オプションを使用するには、クライアント側とサーバー側の両方でデータ読み込みが有効になっていることを確認する必要があります。 Workbench のクライアント側でこれを有効にするには、ツールのホーム画面で接続を変更する必要があります。メイン ウィンドウで接続を右クリックし、接続の編集。で繋がりのページサーバー接続の管理ダイアログ ボックスで、高度タブをクリックし、次のコマンドを追加します。その他箱:

1

OPT_LOCAL_INFILE=1

このコマンドは、ローカルインファイルというオプションの上を実行できるようになります。ロード データを含むステートメント地元オプション。次の図は、接続の画面に表示される設定 (赤で囲まれた部分) を示しています。高度タブ。この設定は、Workbench でのこのユーザーの接続にのみ適用されます。他の接続は個別に設定する必要があります。

LOAD DATA を使用して MySQL データベースにデータをインポートする - Simple Talk (1)

を有効にすることに加えて、ローカルインファイルオプションを有効にするには、local_infileまだ有効になっていない場合は、サーバー上のグローバル変数を使用します。 (これら 2 つの名前の唯一の違いは、グローバル変数ではダッシュではなくアンダースコアが使用されることです。) 変数の設定を確認するには、次のコマンドを実行できます。見せる グローバル 変数MySQL インスタンスに対するステートメント:

1

見せる グローバル 変数 好き 'local_infile';

ステートメントが次の値を返す場合、の上, これで準備は完了です。ステートメントが返された場合オフ、その後、次を実行する必要があります設定変数を有効にするステートメント:

1

設定 グローバル local_infile = 1;

クライアントとサーバーの両方でローカル データ読み込みを有効にしたら、次のコマンドを実行する準備が整います。ロード データ発言。次の例では、テキスト ファイルからデータをインポートするさまざまな側面を示します。例を見ていきながら、各ファイルの内容を示します。サンプルを自分で試してみたい場合は、独自のシステム上にサンプルを作成できます。

の紹介データを読み込む声明

最初の例に入る前に、システムに含まれる基本コンポーネントを理解することが重要です。ロード データステートメントには、多数の節と副節が含まれます。次の構文は、ステートメントの重要な要素とそれらがどのように組み合わされるかの概要を示すために、ステートメントをいくらか単純化しています。

1

2

3

4

5

6

7

8

9

10

11

12

13

ロード データ [地元]

インファイル 'ファイル名'

[交換 | 無視]

の中へ テーブル <えっと>テーブル名</えっと>

田畑

[終了しました '弦']

[[オプションで] 同梱 「チャー」]

[逃げた 「チャー」]

ライン

[起動 '弦']

[終了しました '弦']

無視 <えっと>n</えっと> ライン

[(<えっと>列リスト</えっと>)]

ロード データ句では、地元オプション。前にも述べたように、これがこの記事で私が採用したアプローチです。次の条項では、インファイル、ソース テキスト ファイルのパスとファイル名 (引用符で囲み) を指定します。絶対パスまたは相対パスを指定できます。相対パスの場合、パスは呼び出しディレクトリからの相対パスになります。

その後、どちらかを指定できます交換また無視、どちらもオプションです。の交換このオプションは、同じ一意のキー値を持つ既存の行を置き換えるよう MySQL に指示します。の無視このオプションは、同じキー値を持つ行を無視するように MySQL に指示します。の無視オプションは、地元オプションなので、使用している場合は地元を使用する必要はありません。無視。ただし、次を使用できます。交換オプション付き地元

の中へ テーブル句にはターゲットテーブルの名前を指定します。ここで重要なのは、そのテーブルにデータを追加するために必要な権限が付与されていることを確認することです。

田畑次に節があり、次の 3 つの副次節のうち 1 つ以上をサポートします。

  • 終了しました 副次句は、各フィールドを終了するためにテキスト ファイル内で使用される文字列を指定します。文字列には 1 つ以上の文字を指定できます。デフォルト値は次のとおりです\tこれは、フィールド値を区切るためにタブが使用されることを意味します。
  • 同梱 副次句は、テキスト ファイル内で値を囲むために使用される文字 (文字列値を囲む引用符など) を指定します。のオプションでMySQL のドキュメントによると、キーワード自体はオプションですが、「入力値が引用符で囲まれている必要がない場合」に使用されます。 (これについては、もう少し詳しく説明します。)同梱 subclause は空の文字列で、フィールドが引用符で囲まれていないことを示します。
  • 逃げた subclause は、MySQL がデータを解釈する方法に影響を与える可能性のある文字をエスケープするためにテキスト ファイルで使用される文字を指定します。デフォルト値はバックスラッシュ (\)。これは、バックスラッシュ自体を含む文字をエスケープするために MySQL でも使用されます。多くのプログラミング言語では、文字をエスケープするためにバックスラッシュも使用されます。

田畑句自体はオプションですが、これを含める場合は、副次句を少なくとも 1 つ指定する必要があります。

注:オプションでのオプション同梱 subclause は、ロード データ声明。これを使用しても、私が実行したさまざまなテストでは違いはありませんでした。たとえば、あるテストでは、すべての値をメーカーフィールドは 1 つを除いて二重引用符で囲みます。 MySQL は、オプションでオプション。また、次を使用してオプションをテストしましたヌル値と空の文字列を入力しても、同じ結果が得られました。このオプションが違いを生むユースケースがあるかもしれませんが、私はまだそれを発見していません。しかし田畑ラインの条項ロード データステートメントは選択…入力 概要ステートメント、および MySQL ドキュメントでの議論の多くは、オプションでオプションは~に関連しています選択…入力 概要, したがって、おそらくそれが最も重要な点です。

以下のような田畑条項、ライン句もオプションです。のライン句は次の 2 つの副次句をサポートします。

  • 起動 句では、テキスト ファイルの各行の先頭で使用される共通の接頭辞を指定します。デフォルト値は空の文字列で、特定のプレフィックスが使用されないことを示します。プレフィックスが指定されており、行にそのプレフィックスが含まれていない場合、MySQL はデータをインポートするときにその行をスキップします。
  • 終了しました 句は、テキスト ファイル内で各行を終了するために使用される文字列を指定します。文字列には 1 つ以上の文字を指定できます。デフォルト値は次のとおりです\n、これは改行文字 (ラインフィード) を指します。 Apple の TextEdit アプリでテキスト ファイルを作成したため、私のシステムではデフォルトで動作しましたが、すべてのシステムが同じように動作するわけではありません。たとえば、Windows でテキスト ファイルを作成する場合は、次のように指定する必要がある場合があります。'\r\n'として終了しました 価値。

両方を含めると、田畑条項とライン条項、田畑条項が最初に来る必要があります。の無視 n ライン句はこれら 2 つの句の後に来ます。の無視 n ライン句は、データをインポートするときにファイルの先頭でスキップする行数を指定します。この句は通常、ファイルにヘッダー行が含まれる場合に使用されます。この場合、句は次のように記述されます。無視 1 ライン

最後の句は、括弧で囲まれ、カンマで区切られた列のリストです。この句はオプションですが、ソース データにすべての列のフィールドが含まれており、フィールドが列と同じ順序である場合を除き、ほとんどのステートメントに含めることになります。

ロード データステートメントには他にもいくつかの句が含まれていますが、ここで示した句は始めるのに十分です。それでも、MySQL のトピックを確認することをお勧めします。LOAD DATA ステートメントステートメントのさまざまな要素について詳しく知ることができます。

CSVファイルのインポート

ここまで紹介してきましたが、ロード データステートメントを実際に使用する例をいくつか見てみましょう。次のセクションを進めるときに、必要に応じて前のセクションを参照できます。

最初の例の準備として、という名前のファイルを作成しました。メーカー1.csvそして、次のデータを追加しました。

1

2

3

4

5

6

7

101エアバス

102ビーグル 航空機 限定

103ビーチクラフト

104ボーイング

105ボンバルディア

106セスナ

107エンブラエル

ファイルをフォルダーに保存しました/ユーザー/mac3/ドキュメント/TravelData/私のローカルコンピュータ上で。自分でサンプルを試してみる場合は、Workbench がアクセスできるシステム上の任意の場所にファイルを保存できます。ステートメントを実行する前に、例のファイル パスを必ず更新してください。

を作成した後、メーカー1.csvファイル、私は次を実行しましたロード データデータをメーカーのテーブル旅行データベース:

1

2

3

4

5

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers1.csv'

の中へ テーブル メーカー

田畑 終了しました 「、」

(メーカーID メーカー);

ご覧のとおり、ロード データ条項には以下が含まれます地元オプション、そしてインファイル句にはソースファイルを指定します。これらの後には、の中へ テーブルを指す条項メーカーテーブル。

次の条項では、田畑, が含まれます終了しました サブ句は、デフォルトのタブではなく、フィールド区切り文字としてコンマを使用することを指定します。次に、ステートメントは 2 つのターゲット列の名前を提供します。メーカーIDメーカー—括弧で囲まれています。

ステートメントを実行すると、MySQL はファイルからデータを抽出し、メーカーテーブル。次のコマンドを実行すると、データがテーブルに追加されたことを確認できます。選択する声明:

1

選択する * から メーカー;

選択するこのステートメントは、次の図に示す結果を返します。これは、データがテーブルに正常に挿入されたことを示しています。このステートメントは残りの例の結果を確認するために使用できるため、手元に置いておいてください。

LOAD DATA を使用して MySQL データベースにデータをインポートする - Simple Talk (2)

この記事の内容をシンプルにするために、次のコマンドを実行することもできます。切り詰めるデータを削除するステートメントメーカー次の例の準備中のテーブル:

1

切り詰める テーブル メーカー;

このステートメントも手元に置いておく必要があります。以下の例のほとんどは、特定の概念を説明するいくつかの例を除いて、実行した後に実行する必要があります。その場合は、実行しないように通知します。

インポートファイルの最初の行を無視する

作業するソース ファイルの中には、フィールド名をリストしたヘッダー行や、ファイルの生成日時と場所に関するコメントなどの他の種類の情報が含まれている場合があります。データをインポートするときにこれらの行をスキップするには、無視 n ラインあなたの条項ロード データ声明。

これがどのように機能するかを確認するには、次の名前のテキスト ファイルを作成します。メーカー2.csvファイルを作成し、次のデータをファイルに追加し、ファイルと同じ場所に保存します。メーカー1.csvファイル:

1

2

3

4

5

6

7

8

メーカーIDメーカー

101エアバス

102ビーグル 航空機 限定

103ビーチクラフト

104ボーイング

105ボンバルディア

106セスナ

107エンブラエル

次を実行してくださいロード データステートメントには、無視 1 ラインMySQL に最初の行をスキップするように指示する句:

1

2

3

4

5

6

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers2.csv'

の中へ テーブル メーカー

田畑 終了しました 「、」

無視 1 ライン

(メーカーID メーカー);

を実行した後、ロード データステートメントを再度実行できます。選択するステートメントを使用して、正しいデータが追加されたことを確認します。結果は、ヘッダー行が省略されたことを示すはずです。その後、切り詰める次の例の準備としてステートメントをもう一度繰り返します。

無視 n ライン句は 1 行に限定されません。たとえば、次のような無視 n ライン句では 1 行ではなく 5 行を指定します。

1

2

3

4

5

6

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers2.csv'

の中へ テーブル メーカー

田畑 終了しました 「、」

無視 5 ライン

(メーカーID メーカー);

を実行すると、選択する今回のステートメントでは、次の図に示す結果が得られるはずです。 (他のいくつかの問題点を指摘したいので、この例や次の例の表を切り詰めないでください。)

LOAD DATA を使用して MySQL データベースにデータをインポートする - Simple Talk (3)

ご覧のとおり、テーブルにはソース ファイルの最後の 3 行のみが含まれています。ただし、今回のみ、無視 n ライン句:

1

2

3

4

5

6

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers2.csv'

の中へ テーブル メーカー

田畑 終了しました 「、」

無視 1 ライン

(メーカーID メーカー);

ステートメントを実行すると、MySQL はデータの 7 行すべてをターゲット テーブルに挿入しようとしますが、成功するのは最初の 4 行だけです。ステートメントを実行すると、MySQL は次のメッセージを返します。

4 行が影響を受け、3 つの警告: 1062 キー 'manufacturers.PRIMARY' のエントリ '105' が重複しています。 1062 キー 'manufacturers.PRIMARY' のエントリ '106' が重複しています。 1062 キー 'manufacturers.PRIMARY' のエントリ '107' が重複しています。 PRIMARY' レコード: 7 削除: 0 スキップ: 3 警告: 3

このメッセージは、既存の行がメーカーIDの値105106、 と107スキップされました。つまり、これらの値を持つ新しい行はテーブルに挿入されませんでした。最初の 4 行のみが追加されました。を実行すると、選択するステートメントを再度実行すると、次の図に示すような結果が得られるはずです。 (繰り返しますが、テーブルを切り詰めないでください。次の例のためにそのままにしておきます。)

LOAD DATA を使用して MySQL データベースにデータをインポートする - Simple Talk (4)

テーブルには 7 行のデータがすべて含まれていますが、図のタイムスタンプをよく見ると、最後の 3 行が最初の 5 行よりも 30 秒近く先行していることがわかります。 (最後の2つは実行しましたロード データステートメントはかなり近いものです。)

同じことを実行するとしますロード データステートメントを再度繰り返しますが、今回のみ含めます。交換オプション:

1

2

3

4

5

6

7

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers2.csv'

交換

の中へ テーブル メーカー

田畑 終了しました 「、」

無視 1 ライン

(メーカーID メーカー);

ステートメントを実行すると、MySQL は次のメッセージを返すようになりました。

14 行が影響を受けました レコード: 7 削除: 7 スキップ: 0 警告: 0

メッセージは、14 行が処理されたことを示します。ただし、影響を受けたのは 7 件のレコードのみで、7 件は削除されました。これは、データベース エンジンが 7 つの既存のレコードを削除し、テーブルに再度追加したことを意味します。これが実行されていることを確認できます選択するまたまた発言。結果には、前の結果とは異なるタイムスタンプが表示され、すべての値が同じではないにしても、非常に近い値になるはずです。

を再実行できるようになりました。切り詰める テーブルを準備するためのステートメントメーカー次の例の表を参照してください。

インポートファイル内の引用符で囲まれたフィールドの操作

データをインポートするとき、テキスト ファイルには引用符で囲まれた一部またはすべてのフィールドが含まれる場合があります。たとえば、私が作成したのは、メーカー3.csv次のデータを使用してファイルを作成します。このデータには、文字列値を一重引用符で囲みます。

1

2

3

4

5

6

7

8

メーカーIDメーカー

101'エアバス'

102「ビーグル・エアクラフト・リミテッド」

103「ビーチクラフト」

104「ボーイング」

105「ボンバルディア」

106「セスナ」

107「エンブラエル」

引用符で囲まれたフィールドを処理するには、同梱 あなたの副節田畑次の例に示すように、句を追加します。

1

2

3

4

5

6

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers3.csv'

の中へ テーブル メーカー

田畑 終了しました 「、」 同梱 「\」'

無視 1 ライン

(メーカーID メーカー);

同梱 subclause は、フィールドを囲むために単一引用符が使用されることを指定します。データベース エンジンに送信するときに文字をエスケープするために、引用符の前にバックスラッシュが付けられます。を使用しない場合は、同梱 副節では、データベース エンジンは引用符をリテラル値として扱い、残りの値とともに格納します。

を実行した後、ロード データステートメントを実行すると、選択するステートメントを使用して結果を確認し、実行します。切り詰めるを準備するためのステートメントメーカー次の例の表を参照してください。

シングルクォーテーションを指定した場合、同梱 副次節をバックスラッシュでエスケープするのではなく、二重引用符で囲むことができます。

1

2

3

4

5

6

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers3.csv'

の中へ テーブル メーカー

田畑 終了しました 「、」 同梱 「」

無視 1 ライン

(メーカーID メーカー);

場合によっては、テキスト ファイルではフィールド値を一重引用符ではなく二重引用符で囲むことがあります。これらを処理する方法を示すために、私はメーカー4.csv次のデータを使用してファイルを作成します。

1

2

3

4

5

6

7

8

メーカーIDメーカー

101エアバス

102ビーグル 航空機 限定

103ビーチクラフト

104ボーイング

105ボンバルディア

106セスナ

107エンブラエル

このファイルを処理するには、同梱 副次句を変更して二重引用符を指定し、一重引用符で囲む必要があります。

1

2

3

4

5

6

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers4.csv'

の中へ テーブル メーカー

田畑 終了しました 「、」 同梱 「」

無視 1 ライン

(メーカーID メーカー);

これを実行した後、ロード データステートメントをもう一度実行できます。選択する結果を確認するためのステートメント。それらを確認したら、切り詰める次の例の準備のためのステートメント。 (残りのすべての例に対してこれを行う必要があります。)

テキスト ファイルでさまざまな形式を使用する

操作するテキスト ファイルは、カンマ区切りではなくテーブル区切りである場合があり、特別な処理が必要な他の要素が含まれている場合があります。考えますメーカー5.txt次のデータを使用して作成したファイル:

1

2

3

4

5

6

7

8

メーカーIDメーカー

**101エアバス

**102ビーグル 航空機 限定

**103ビーチクラフト

**104ボーイング

**105ボンバルディア

**106セスナ

**107エンブラエル

この場合、タブがフィールド区切り文字として使用され、各行の前に*、*文字。そのため、指定する必要はありません。終了しました の副次節田畑タブがデフォルト値であるため、句を使用できますが、行プレフィックスを処理する手順を実行する必要があります。このためには、ラインを含む条項起動 接頭辞文字を指定する副次句:

1

2

3

4

5

6

7

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers5.txt'

の中へ テーブル メーカー

田畑 同梱 「」

ライン 起動 「*、*」

無視 1 ライン

(メーカーID メーカー);

このステートメントを実行すると、MySQL はプレフィックス文字を使用して追加する行を決定し、プロセス内で文字を削除します。

すでに指摘したように、前の例には終了しました の副次節田畑句。また、終了しました の副次節ラインテキスト ファイルではデフォルトの改行値が使用されているため、句が使用されません。ただし、必要に応じて両方の句を含めることもできます。

1

2

3

4

5

6

7

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers5.txt'

の中へ テーブル メーカー

田畑 終了しました '\t' 同梱 「」

ライン 終了しました '\n' 起動 「*、*」

無視 1 ライン

(メーカーID メーカー);

を使用するときは、起動 副節では、テキスト ファイルでこれらの接頭辞を一貫して使用する必要があることに注意してください。そうしないと、予期しない結果が生じる可能性があります。たとえば、次のテキスト ファイルの場合、メーカー6.txtには、2 つのレコードが含まれるが、最初のレコードの前にプレフィックスがない行が含まれています。

1

2

3

4

5

6

7

メーカーIDメーカー

**101エアバス

**102ビーグル 航空機 限定

**103ビーチクラフト

104ボーイング **105ボンバルディア

**106セスナ

**107エンブラエル

システム上にファイルを作成したら、次のコマンドを実行できます。ロード データ何が起こるかを確認するためのステートメント:

1

2

3

4

5

6

7

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers6.txt'

の中へ テーブル メーカー

田畑 同梱 「」

ライン 起動 「*、*」

無視 1 ライン

(メーカーID メーカー);

このステートメントを実行すると、MySQL はレコードをスキップします。メーカーIDの値104ただし、値が次のレコードを追加します。105。これを確認するには、もう一度実行します。選択するステートメントを実行すると、次の図に示す結果が返されます。

LOAD DATA を使用して MySQL データベースにデータをインポートする - Simple Talk (5)

場合によっては、行が (通常の改行や改行ではなく) 非伝統的な文字で終了しているテキスト ファイルに遭遇することがあります。たとえば、私が作成したのは、メーカー7.txt次のデータを使用してファイルを作成します。行は 3 つのハッシュ マーク (###):

1

メーカーIDメーカー###101エアバス「###102ビーグル 航空機 限定「###103ビーチクラフト「###104ボーイング「###105ボンバルディア「###106セスナ「###107エンブラエル

このファイルに対応するには、終了しました あなたの中の副節ラインハッシュマークを指定する句:

1

2

3

4

5

6

7

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers7.txt'

の中へ テーブル メーカー

田畑 同梱 「」

ライン 終了しました 「###」

無視 1 ライン

(メーカーID メーカー);

このステートメントを実行すると、データベース エンジンはハッシュマークの解釈方法を認識し、それに応じてデータを挿入し、プロセスでハッシュマークを削除します。

場合によっては、フィールド内の文字をエスケープするためにバックスラッシュ以外の文字を使用するテキスト ファイルに遭遇することもあります。たとえば、メーカー8.txtファイルには 7 行のカンマ区切りフィールドが含まれており、そのうちの 1 行には製造元名にカンマが含まれています。

1

2

3

4

5

6

7

8

メーカーIDメーカー

101エアバス

102ビーグル 航空機 限定

103ビーチクラフト

104すぐ 航空機^ 株式会社

105ボンバルディア

106セスナ

107エンブラエル

この場合、名前のカンマはキャレット (^)。この文字はバックスラッシュ (デフォルトのエスケープ文字) ではないため、エスケープ 次の例に示すように、キャレットを指定する句。

1

2

3

4

5

6

ロード データ 地元 インファイル

'/Users/mac3/Documents/TravelData/manufacturers8.txt'

の中へ テーブル メーカー

田畑 終了しました 「、」 逃げた '^'

無視 1 ライン

(メーカーID メーカー);

を含めない場合は、エスケープ 句を指定すると、データベース エンジンは次のようにキャレットを保持しますが、製造元名を切り詰めます。すぐ 航空機^。ただし、この句を含めると、MySQL はキャレットを取り除き、カンマをリテラル値として扱い、その結果、カラム値は次のようになります。すぐ 航空機、 株式会社. 切り捨てられたバージョンではなく。

MySQL へのデータのインポートの開始

前述したように、ロード データこのステートメントには、ここで示したもの以外の要素も含まれています。データをインポートするための他のオプションもあります。mysqlimportコマンド ライン ユーティリティ。生成および送信します。ロード データMySQL サーバーへのステートメント。ユーティリティのオプションのほとんどは、ロード データ声明。別のオプションは、テーブル データ 輸入MySQL Workbench のウィザード。ウィザードでは、CSV または JSON ファイルからデータをインポートするプロセスを順を追って説明します。

定期的に MySQL データベースを使用している場合は、たとえテスト環境や開発環境をセットアップするためであっても、テキスト ファイルからデータをインポートしたくなる可能性が高くなります。ほとんどの場合、ここで示した内容で十分に作業を開始できます。ロード データ声明。ここで説明していない状況に遭遇する可能性があることを念頭に置いてください。その場合は、ギャップを埋めるために他の MySQL ドキュメントを参照することをお勧めします。

付録: MySQL 環境の準備

この記事の例を作成するとき、MySQL 8.0.29 (Community Server エディション) のローカル インスタンスでセットアップされた Mac コンピューターを使用しました。また、MySQL とのインターフェースとして MySQL Workbench も使用しました。この例では、Apple のテキスト エディタである TextEdit で作成したサンプル テキスト ファイルのセットからデータをインポートします。

記事全体でファイルの内容と例を示します。ロード データ発言。これらの例を試してみる場合は、これらの例を実行しながら独自のシステム上にファイルを作成できます。ただし、始める前に、MySQL インスタンスに対して次のスクリプトを実行する必要があります。

1

2

3

4

5

6

7

8

9

10

11

落とす データベース もしも 存在します 旅行;

作成 データベース 旅行;

使用 旅行;

作成 テーブル メーカー(

メーカーID INT 署名なし いいえ ヌル

メーカー VARCHAR(50) いいえ ヌル

日付を作成します タイムスタンプ いいえ ヌル デフォルト CURRENT_TIMESTAMP

最後の更新 タイムスタンプ いいえ ヌル

デフォルト CURRENT_TIMESTAMP の上 アップデート CURRENT_TIMESTAMP

主要な (メーカーID) );

スクリプトによって作成されるのは、旅行データベースを作成し、メーカーテーブル。それ以外の場合、(ソース テキスト ファイルの作成に加えて) サンプルを試すために必要なのはこれだけです。ほとんどの例では、次の例の表を準備するためにデータを単純に切り捨てました。以前の記事用にデータベースとテーブルをすでに作成している場合は、今すぐ再作成するか、少なくともメーカー始める前のテーブル。

References

Top Articles
Latest Posts
Article information

Author: Geoffrey Lueilwitz

Last Updated: 05/24/2023

Views: 5305

Rating: 5 / 5 (80 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Geoffrey Lueilwitz

Birthday: 1997-03-23

Address: 74183 Thomas Course, Port Micheal, OK 55446-1529

Phone: +13408645881558

Job: Global Representative

Hobby: Sailing, Vehicle restoration, Rowing, Ghost hunting, Scrapbooking, Rugby, Board sports

Introduction: My name is Geoffrey Lueilwitz, I am a zealous, encouraging, sparkling, enchanting, graceful, faithful, nice person who loves writing and wants to share my knowledge and understanding with you.