MySQL: データをテーブルに追加 – INSERT文、INTO、VALUES句

INSERT文を用いて1レコードを追加する練習をしてみます。
前回までにテーブルの作成と構造の修正を行いましたが、これから使うテーブルは下記のものにします(少しフィールドを削りました)。

テーブルへのデータの挿入は基本的には以下の構文を使います。

INSERT INTO <テーブル名>
(<列名1> , <列名2>, ...)
VALUES
(<列名1へのデータ>, <列名2へのデータ>, ...);

実際にプロンプト上で打つと、

となります。最初の丸括弧「()」内で列名を列挙し、二つ目のVALUES句の丸括弧内で、挿入するレコード値を書きます。数値はそのまま書きますが、文字列はシングルクォート「’」で囲まなければいけません。仮に文字としてシングルクォート「’」を使いたい場合はその直前に「\」をつける必要があります。すなわち、「\’」と書きます。
また、主キーのフィールドに重複するデータを追加しようとすると下記のようなエラーがでます。

ちなみに、INSERT文にはいくつか下記のような簡略化した書き方があります。

(<列名1> , <列名2>, …)句の省略

ただし、VALUES (…)句内のデータの順序はテーブルの列の順序に合わせなければいけません。

INSERT INTO <テーブル名>
VALUES
(<列名1へのデータ>, <列名2へのデータ>, ...);

今回のテーブルに使ってみると、

これは手っ取り早くていいですね。

(<列名Y> , <列名X>, …)句とVALUES (<列名Yへのデータ>, <列名Xへのデータ>, …)句内の列順序の変更

二つの丸括弧内の「列名―代入するデータ」の対応が取れていれば、どんな順序で書いても良いです。
仮にテーブル内のフィールドがA, B, Cの順で並んでいても、

INSERT INTO <テーブル名>
(<列名C> , <列名A>, <列名B>, ...)
VALUES
(<列名Cへのデータ> , <列名Aへのデータ>, <列名Bへのデータ>, ...);

のように記述できます。試しに打ってみると、

一部のフィールド値の挿入を省略

二つの丸括弧内の「列名―代入するデータ」の対応が取れていれば、全列へのデータの代入をしなくてもOKです。
例えば、テーブルにA, B, CというフィールドがあったときA, Cだけにデータを追加するには、

INSERT INTO <テーブル名>
(<列名A>, <列名C> , ...)
VALUES
(<列名A>, <列名C>, ...);

と書けます。このとき列Bには、デフォルト値が設定されているならばその値が、ないならばNULLが代入されます。
今回のテーブルでは、

book_idフィールドを省略しましたが、このフィールドはauto_incrementを指定してあるので、前に挿入されたbook_idフィールドの値を1増やした値が代入されます。

追加されたデータを確認(検索) – SELECT文

それでは最後に以下のコマンドを打ち、上述で追加されたレコードを確認してみましょう。

確かにコマンドどおりのレコードが入っていますね。

リファレンス