INSERT文を用いて1レコードを追加する練習をしてみます。
前回までにテーブルの作成と構造の修正を行いましたが、これから使うテーブルは下記のものにします(少しフィールドを削りました)。
mysql> DESC book_list; +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | book_id | int(11) | NO | PRI | NULL | auto_increment | | title | varchar(128) | NO | | NULL | | | author | varchar(32) | NO | | NULL | | | price | int(11) | NO | | NULL | | | comments | text | NO | | NULL | | +----------+--------------+------+-----+---------+----------------+
テーブルへのデータの挿入は基本的には以下の構文を使います。
INSERT INTO <テーブル名>
(<列名1> , <列名2>, ...)
VALUES
(<列名1へのデータ>, <列名2へのデータ>, ...);
実際にプロンプト上で打つと、
mysql> INSERT INTO book_list -> (book_id, title, author, price, comments) -> VALUES -> (1, 'book_A', 'auth_A', 1500, 'good, bad, excellence');
となります。最初の丸括弧「()」内で列名を列挙し、二つ目のVALUES句の丸括弧内で、挿入するレコード値を書きます。数値はそのまま書きますが、文字列はシングルクォート「’」で囲まなければいけません。仮に文字としてシングルクォート「’」を使いたい場合はその直前に「\」をつける必要があります。すなわち、「\’」と書きます。
また、主キーのフィールドに重複するデータを追加しようとすると下記のようなエラーがでます。
ERROR 1062 (23000): Duplicate entry '1' for key 1
ちなみに、INSERT文にはいくつか下記のような簡略化した書き方があります。
(<列名1> , <列名2>, …)句の省略
ただし、VALUES (…)句内のデータの順序はテーブルの列の順序に合わせなければいけません。
INSERT INTO <テーブル名>
VALUES
(<列名1へのデータ>, <列名2へのデータ>, ...);
今回のテーブルに使ってみると、
mysql> INSERT INTO book_list -> VALUES -> (2, 'book_B', 'auth_B', 2900, 'not bad, good');
これは手っ取り早くていいですね。
(<列名Y> , <列名X>, …)句とVALUES (<列名Yへのデータ>, <列名Xへのデータ>, …)句内の列順序の変更
二つの丸括弧内の「列名―代入するデータ」の対応が取れていれば、どんな順序で書いても良いです。
仮にテーブル内のフィールドがA, B, Cの順で並んでいても、
INSERT INTO <テーブル名>
(<列名C> , <列名A>, <列名B>, ...)
VALUES
(<列名Cへのデータ> , <列名Aへのデータ>, <列名Bへのデータ>, ...);
のように記述できます。試しに打ってみると、
mysql> INSERT INTO book_list -> (author, title, book_id, comments, price) -> VALUES -> ('auth_C', 'book_C', 3, 'interesting, amazing', 1800);
一部のフィールド値の挿入を省略
二つの丸括弧内の「列名―代入するデータ」の対応が取れていれば、全列へのデータの代入をしなくてもOKです。
例えば、テーブルにA, B, CというフィールドがあったときA, Cだけにデータを追加するには、
INSERT INTO <テーブル名>
(<列名A>, <列名C> , ...)
VALUES
(<列名A>, <列名C>, ...);
と書けます。このとき列Bには、デフォルト値が設定されているならばその値が、ないならばNULLが代入されます。
今回のテーブルでは、
mysql> INSERT INTO book_list -> (title, author, price, comments) -> VALUES -> ('book_D', 'auth_D', 700, 'sad, depress');
book_idフィールドを省略しましたが、このフィールドはauto_incrementを指定してあるので、前に挿入されたbook_idフィールドの値を1増やした値が代入されます。
追加されたデータを確認(検索) – SELECT文
それでは最後に以下のコマンドを打ち、上述で追加されたレコードを確認してみましょう。
mysql> SELECT * FROM book_list; +---------+--------+--------+-------+-----------------------+ | book_id | title | author | price | comments | +---------+--------+--------+-------+-----------------------+ | 1 | book_A | auth_A | 1500 | good, bad, excellence | | 2 | book_B | auth_B | 2900 | not bad, good | | 3 | book_C | auth_C | 1800 | interesting, amazing | | 4 | book_D | auth_D | 700 | sad, depress | +---------+--------+--------+-------+-----------------------+
確かにコマンドどおりのレコードが入っていますね。