テーブルを作成したら、データを移入する必要があります。 これには、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.txt
を pet
テーブルにロードするには、次のステートメントを使用します。
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';
(macOS を実行している 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
ステートメントを使用する場合よりもかなり多くの入力が必要になります。