INSERT INTO文でレコードを追加する

この項ではテーブルにレコードを挿入するINSERT INTO構文について解説します。

INSERT INTOの構文

構文1

INSERT INTO テーブル名 列名リスト(カンマ区切り) )
VALUES( 値リスト(カンマ区切り) )

もっとも基本的な構文です。
列名リストの1番目の列に値リストの1番目の値、列目リストの2番目の列に値リストの2番目の値…と、順に列と値を対応させたレコードがテーブルに挿入されます。
列名のカンマ区切りリストに含まれる列の個数と値のカンマ区切りリストに含まれる値の個数が一致しない場合にはエラーとなります。

構文2

INSERT INTO テーブル名( 列名リスト(カンマ区切り) )
VALUES( 値リスト(カンマ区切り) ),
( 値リスト(カンマ区切り) ),
( 値リスト(カンマ区切り) )…

1度に複数のレコードを挿入する形式です。VALUESの後に任意の個数だけ(…)で囲んだ値のカンマ区切りリストを記述します。値リストの個数だけレコードが挿入されます。
構文1と同じく、列名のカンマ区切りリストに含まれる列の個数と値のカンマ区切りリストに含まれる値の個数が一致しない場合にはエラーとなります。

構文3

INSERT INTO テーブル名 VALUES( 値リスト(カンマ区切り) )

テーブル名の後の列名リストを省略した形式です。この場合はテーブルにある列すべてについて代入する値を指定します。値の順番はテーブルを定義した際の順番です。
値のカンマ区切りリストに含まれる値の個数がテーブルの列の個数と一致しない場合にはエラーとなります。

エラーの発生

INSERT INTO文が文法的に正しくても、挿入する値が制約に違反している場合にはエラーとなります。
たとえば、主キーに指定した列に既存レコードと値が重複しているレコードを挿入しようとすると Duplicate Entry エラーが発生します。

INSERT INTOの例

SQL
INSERT INTO meibo (name, ruby, birthday, email)
VALUES ('山田太郎' , 'ヤマダタロウ' , '1997-7-1' , 'yamada@example.com');

CREATE TABLEの項で作成したテーブルmeiboに対して、

namerubybirthdayemail
山田太郎ヤマダタロウ1997-7-1yamada@example.com

というレコードを挿入する例です。

・列 id は auto_increment が設定されており自動採番されるため、挿入する値を指定していません。
・DATE型の列も文字列と同じようにシングルクォーテーションで囲んで値を指定することに注意して下さい。

練習2

練習1で作成したテーブル ex_shohin に、以下のレコードを挿入しなさい。

idnamepricenote
1いちご200ビタミンC,糖質
2にんじん180βカロテン,ビタミンB1,ビタミンB2
3サラダ菜160βカロテン,ビタミンK
4ヨーグルト240糖質,アミノ酸,カルシウム,ビタミンB2

さらに、以下のレコードを挿入するINSERT文を実行し、エラーになることを確認しなさい。

idnamepricenote
1いちじく250ビタミンC,カルシウム,ビタミンB1

コメント

タイトルとURLをコピーしました