MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでテキストファイルをテーブルにインポートする際、2行間の空白行はどのように評価されるのか?

テキストファイル内の2行の間に空白行が存在する場合、MySQLはそのファイルをテーブルへインポートする際に、空白行も1つのデータ行として評価します。具体的な例を使って、この挙動を詳しく見ていきましょう。

空白行を含むテキストファイルの例

たとえば、「A.txt」というテキストファイルの2行の間に空白行が含まれているとします。

105,Chum,USA,11000

106,Danny,AUS,12000

上記のファイルでは、2つのレコードの間に空白行が1行入っています。この状態でデータをインポートすると、どうなるでしょうか。

LOAD DATA文によるインポート

次のクエリを実行して、テキストファイルのデータをMySQLのテーブルにインポートします。

mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO table employee10_tbl FIELDS TERMINATED BY ',';
Query OK, 3 rows affected, 4 warnings (0.05 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 4

実行結果を見ると、3行がアップロードされ、4件の警告(warnings)が出力されています。本来は2行しかデータがありませんが、空白行も1行としてカウントされている点に注目してください。それでは、実際にどのようなデータが登録されたのか確認してみましょう。

インポート結果の確認

mysql> Select * from employee10_tbl;
+------+----------------+----------+--------+
| Id   | Name           | Country  | Salary |
+------+----------------+----------+--------+
| 105  | Chum           | USA      |  11000 |
|    0 | NULL           | NULL     |   NULL |
| 106  | Danny          | AUS      |  12000 |
+------+----------------+----------+--------+
3 rows in set (0.00 sec)

この結果セットから、MySQLが2行間の空白行を有効なデータ行として評価し、Id列には「0」、その他の列には「NULL」を挿入してアップロードしたことがわかります。

補足:空白行による意図しないデータを防ぐには

このような不要な行の取り込みを防ぐためには、次の対策が有効です。

事前にファイルを整形する: インポート前にテキストファイルから空白行を削除しておくのが最も確実な方法です。
警告を必ず確認する: LOAD DATA文の実行後に出力されるWarningsの内容をチェックすれば、空白行など問題のある行を早期に発見できます。
検証クエリで確認する: インポート後にSELECT文でデータを確認し、Id列が0やNULLになっている行がないかチェックしましょう。

このように、MySQLのLOAD DATA文は空白行を自動的にスキップしないため、インポート前のデータ準備と実行後の検証が重要になります。

  1. MySQLでテーブルAとBを比較し、Bに存在しないデータをテーブルCに挿入する方法

    MySQL:テーブルAとBを比較し、Bに存在しないデータをCへ挿入する方法テーブルAのデータとテーブルBを比較し、Bに存在しないレコードだけをテーブルCに挿入したい場合は、LEFT JOIN(左外部結合)を使うのが最もシンプルで確実な方法です。ここでは、3つのテーブル(demo20=テーブルA、demo21=テーブルB、demo22=テーブルC)を使って、具体的な手順を順番に解説します。ステップ1:テーブルA(demo20)を作成するまず、比較元となる最初のテーブルを作成します。mysql> create table demo20 −> ( −> id

  2. PHPでテキストファイルの末尾5行だけを読み取る方法

    テキストファイルの末尾5行だけを読み取りたい場合は、file() 関数と count() 関数を組み合わせることで簡単に実現できます。具体的なコードは以下のとおりです。コード例$file = file(filename.txt); for ($i = max(0, count($file)-6); $i < count($file); $i++) { echo $file[$i] . \n; }出力結果このコードを実行すると、次のような出力が得られます。ファイルに5行を超えるテキストが含まれている場合、テキストファイルの最後の5行が表示されます。コードの仕組みまず file()