【MySQL】区切り文字で1行にまとめられたテキストデータをテーブルへインポートする方法
はじめに
通常、LOAD DATA文でインポートするテキストファイルは、1レコードにつき1行で構成されているのが一般的です。しかし、実際には区切り文字を使って複数のレコードを同じ行に記述したテキストファイルを作成することも可能です。
このような形式のファイルをMySQLのテーブルにインポートする場合は、LINES TERMINATED BY句を使用する必要があります。本記事では、具体的な手順を例とともに解説します。
サンプルとなるテキストファイルの準備
ここでは、行末の区切り文字として「|(縦棒)」を使用したテキストファイルを想定します。ファイルの内容は以下のようになっています。
id,Name,Country,Salary|105,Chum*,Marsh,USA,11000|106,Danny*,Harrison,AUS,12000
このファイルでは、各レコードが「|」で区切られており、さらにフィールド同士は「,(カンマ)」で区切られています。また、Nameフィールド内のカンマはエスケープ文字「*」で保護されています。
インポート用SQLクエリの実行
このテキストファイルをMySQLテーブルへインポートする際には、以下のようにクエリ内でLINES TERMINATED BYオプションを明示的に指定します。
mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO table employee7_tbl FIELDS TERMINATED BY ',' ESCAPED BY '*' LINES TERMINATED BY '|' IGNORE 1 ROWS; Query OK, 2 rows affected (0.05 sec) Records: 2 Deleted: 0 Skipped: 0 Warnings: 0
このクエリで使用している各オプションの意味は次のとおりです。
- FIELDS TERMINATED BY ',':各フィールドはカンマで区切られていることを指定
- ESCAPED BY '*':アスタリスクをエスケープ文字として扱うことを指定
- LINES TERMINATED BY '|':1行の終わりを縦棒「|」で判定することを指定
- IGNORE 1 ROWS:先頭のヘッダー行を読み飛ばすことを指定
クエリの実行結果、「2 rows affected」と表示され、2件のレコードが正常にインポートされたことがわかります。
インポート結果の確認
最後に、SELECT文を使ってテーブルの中身を確認してみましょう。
mysql> Select * from employee7_tbl; +------+----------------+----------+--------+ | Id | Name | Country | Salary | +------+----------------+----------+--------+ | 105 | Chum,Marsh | USA | 11000 | | 106 | Danny,Harrison | AUS | 12000 | +------+----------------+----------+--------+ 2 rows in set (0.00 sec)
このように、エスケープ文字「*」によって保護されていたカンマが正しく復元され、「Chum,Marsh」「Danny,Harrison」という名前データがそのまま格納されていることが確認できます。
まとめ
区切り文字で同一行に複数レコードが含まれるテキストファイルをMySQLにインポートする場合も、基本的な手順は通常のCSVインポートと変わりません。ポイントは、行の区切り方をLINES TERMINATED BY句で適切に指定することです。また、データ内に区切り文字と同じ記号が含まれる場合は、ESCAPED BY句でエスケープ文字を設定しておくことで、正確なデータの取り込みが可能になります。
-
MySQLでテーブルの最大IDに関連付けられたデータを取得する方法
最大値のレコードを取得する基本的な考え方MySQLのテーブルから最も大きい値(最大ID)を持つレコードを取得したい場合は、ORDER BYで降順(DESC)に並べ替え、LIMITで先頭の行だけを取り出すのが定番の手法です。select *from yourTableName order by yourColumnName DESC LIMIT 1;なお、「LIMIT 1,1」と指定すると先頭の1行を読み飛ばして次の行を取得するため、結果として2番目に大きい値が返ります。「最大値そのもの」なのか「2番目に大きい値」なのか、目的に応じて使い分けましょう。サンプルテーブルの作成まずは動作確認用のテー
-
MySQLでテーブルのデータを選択して、同じデータベース内の別のテーブルに挿入する方法
あるテーブルから別のテーブルへデータを挿入するには、INSERT INTOステートメントを使用します。この記事では、SELECT文で取得したデータを、同じデータベース内の別テーブルへ挿入する手順を、実際のSQL文と実行結果とともに解説します。1. 元となるテーブルを作成するまず、データのコピー元となるテーブル「DemoTable1」を作成します。mysql> create table DemoTable1 ( Id int, FirstName varchar(20),