Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  テーブルへのデータのロード

3.3.3 テーブルへのデータのロード

テーブルを作成したら、データを移入する必要があります。これには、LOAD DATA ステートメントと INSERT ステートメントが役立ちます。

ペットのレコードを次のように記述できると仮定します。(MySQL では、日付の形式は 'YYYY-MM-DD' と想定されています。これはユーザーが通常使用する形式とは異なる場合があります。)

name owner species sex birth death
Fluffy Harold cat f 1993-02-04  
Claws Gwen cat m 1994-03-17  
Buffy Harold dog f 1989-05-13  
Fang Benny dog m 1990-08-27  
Bowser Diane dog m 1979-08-31 1995-07-29
Chirpy Gwen bird f 1998-09-11  
Whistler Gwen bird   1997-12-09  
Slim Benny snake m 1996-04-29  

空のテーブルから始めているため、データを移入する簡単な方法は、各ペットに対応する行を記述したテキストファイルを作成してから、1 つのステートメントでそのファイルの内容をテーブルにロードすることです。

たとえば、テキストファイル pet.txt を作成し、1 行に 1 レコードを記述します。値は、CREATE TABLE ステートメントに指定したカラムの順序に従い、タブで区切って指定します。性別が不明な場合やまだ生きているペットの死亡年月日など、不足している値には NULL 値を使用できます。テキストファイルでこれらを表現するには、\N (バックスラッシュと大文字の N) を使用します。たとえば、Whistler という鳥のレコードは次のようになります (値の間の空白は 1 つのタブ文字です)。

Whistler        Gwen    bird    \N      1997-12-09      \N

テキストファイル pet.txtpet テーブルにロードするには、次のステートメントを使用します。

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;

このファイルを Windows で作成した場合、作成に使用したエディタで \r\n が行ターミネータとして使用されているときは、代わりに次のステートメントを使用します。

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
    -> LINES TERMINATED BY '\r\n';

(OS X を実行している Apple マシンでは、LINES TERMINATED BY '\r' を使用するとよいでしょう。)

カラム値の区切り文字と行末マーカーは、必要に応じて LOAD DATA ステートメントで明示的に指定できますが、デフォルトではタブと改行です。ステートメントで pet.txt ファイルを正しく読み取るにはこれで十分です。

ステートメントが失敗する場合、使用している MySQL インストールではローカルファイル機能がデフォルトで有効になっていない可能性があります。これを変更する方法については、セクション6.1.6「LOAD DATA LOCAL のセキュリティーの問題」を参照してください。

新しいレコードを 1 つずつ追加する場合は、INSERT ステートメントが役立ちます。もっとも単純な形式では、CREATE TABLE ステートメントに指定したカラムの順序に従って、各カラムの値を入力します。Diane が、Puffball という名前の新しいハムスターを手に入れたとします。次のように、INSERT ステートメントを使用して新しいレコードを追加できます。

mysql> INSERT INTO pet
    -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);

ここでは、文字値と日付値を、引用符付きの文字列で指定しています。また、INSERT では、不足している値を表す NULL を直接挿入することができます。LOAD DATA の場合のように \N を使用することはありません。

この例からわかるとおり、初期レコードをロードするために複数の INSERT ステートメントを使用すると、1 つの LOAD DATA ステートメントを使用する場合よりもかなり多くの入力が必要になります。