データベース チームと開発チームは、プレーン テキスト ファイルから 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 でのこのユーザーの接続にのみ適用されます。他の接続は個別に設定する必要があります。
を有効にすることに加えて、ローカルインファイル
オプションを有効にするには、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 | 選択する * から メーカー; |
の選択する
このステートメントは、次の図に示す結果を返します。これは、データがテーブルに正常に挿入されたことを示しています。このステートメントは残りの例の結果を確認するために使用できるため、手元に置いておいてください。
この記事の内容をシンプルにするために、次のコマンドを実行することもできます。切り詰める
データを削除するステートメントメーカー
次の例の準備中のテーブル:
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、 メーカー); |
を実行すると、選択する
今回のステートメントでは、次の図に示す結果が得られるはずです。 (他のいくつかの問題点を指摘したいので、この例や次の例の表を切り詰めないでください。)
ご覧のとおり、テーブルにはソース ファイルの最後の 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
の値105
、106
、 と107
スキップされました。つまり、これらの値を持つ新しい行はテーブルに挿入されませんでした。最初の 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
。これを確認するには、もう一度実行します。選択する
ステートメントを実行すると、次の図に示す結果が返されます。
場合によっては、行が (通常の改行や改行ではなく) 非伝統的な文字で終了しているテキスト ファイルに遭遇することがあります。たとえば、私が作成したのは、メーカー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) ); |
スクリプトによって作成されるのは、旅行
データベースを作成し、メーカー
テーブル。それ以外の場合、(ソース テキスト ファイルの作成に加えて) サンプルを試すために必要なのはこれだけです。ほとんどの例では、次の例の表を準備するためにデータを単純に切り捨てました。以前の記事用にデータベースとテーブルをすでに作成している場合は、今すぐ再作成するか、少なくともメーカー
始める前のテーブル。