テーブルを作成した後は、そこにデータを追加する必要があります。データを追加するには、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 つのステートメントでそのファイルの内容をロードします。
ここでは、CREATE TABLE
ステートメントで記述したカラムの順番に合わせて、1
行に 1
レコードの形式でタブで区切った値を記述したテキストファイル
pet.txt
を作成します。値がない場合(性別がわからない場合や生存中のペットの命日など)、代わりに
NULL
値を使用できます。テキストファイルでそれを表現するには、\N
(バックスラッシュと大文字の
N)を使用します。たとえば、鳥の Whistler
のレコードは以下のようになります。
name | owner | species | sex | birth | death |
Whistler |
Gwen |
bird |
\N |
1997-12-09 |
\N |
テキストファイル pet.txt
を
pet
テーブルにロードするには、以下のコマンドを使用します。
mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
必要に応じて、カラムの区切り文字および改行コードを、LOAD
DATA
ステートメントで明示的に指定できます。デフォルトはそれぞれタブと
LF
です。上記のステートメントでテキストファイル
pet.txt
を正しく読み込むには、デフォルトで十分です。
このステートメントでエラーが発生する場合、使用している
MySQL インストールで、LOCAL INFILE
機能がデフォルトで有効になっていないことが考えられます。これを変更する方法については、項4.3.4. 「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
ステートメントを使用するよりもはるかに多くの文字を入力する必要があるということがわかります。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.