【MySQL】データの基本操作 - 追加・取得・更新・削除

【MySQL】データの基本操作 - 追加・取得・更新・削除

ここでは、MySQLのデータの基本操作を解説します。

検証環境

データ

MySQLのRDBのデータ操作(追加・取得・更新・削除など)は基本的にレコード単位で行います。

本ドキュメントでは次のテーブルを例に各操作を解説します。

mysql> desc items;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | YES  |     | NULL    |       |
| price | int         | YES  |     | NULL    |       |
| stock | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

追加(INSERT INTO VALUE

データの追加はINSERT INTO VALUE文を使います。

基本構文

INSERT INTO テーブル名(カラム1, カラム2 ...) VALUE(値1, 値2 ...)

テーブル名後の丸括弧(())内に値を格納するカラムを記述し、複数ある場合はカンマ(,)で区切ります。

VALUE後の丸括弧(())内は各カラムの値(データ)です。

カラムと同様に複数ある場合はカンマで区切りますが、値の順序はカラムの順序と一致するようにしてください。

サンプル

mysql> INSERT INTO items (
    -> name, price, stock
    -> ) VALUE (
    -> 'Apple', 200, 10
    -> );
Query OK, 1 row affected (0.00 sec)

->は構文とは関係ありません。(改行時に自動で出力される記号です。)

一部カラムのみの指定も可能です。

mysql> INSERT INTO items (
    -> name, price
    -> ) VALUE (
    -> 'Apple', 200
    -> );
Query OK, 1 row affected (0.00 sec)

また、(カラム)を省略すると、全てのカラムが対象になります。

mysql> INSERT INTO items VALUE ( 'Apple', 200, 10 );
Query OK, 1 row affected (0.00 sec)

複数追加(INSERT INTO VALUES

複数データの一括追加はINSERT INTO VALUES文を使います。

基本構文

INSERT INTO テーブル名(カラム) VALUES(値),(値),(値);

1つのみの追加(VALUE)と基本的には同じです。

レコードは丸括弧(())単位で記述し、複数ある場合はカンマ(,)で区切ります。

サンプル

mysql> INSERT INTO items (
    -> name, price, stock
    -> ) VALUES (
    -> 'Orange', 150, 3
    -> ),(
    -> 'Pineapple', 1100, 3
    -> ),(
    -> 'Grapes', 3500, 1
    -> );
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

取得(SELECT FROM

データの取得はSELECT FROM文を使います。

基本構文

SELECT カラム1, カラム2 ... FOMR テーブル名;

データを取得するカラムが複数ある場合はカンマ(,)で区切って記述します。

サンプル

mysql> SELECT name, price, stock FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Apple     |   200 |    10 |
| Orange    |   150 |     3 |
| Pineapple |  1100 |     3 |
| Grapes    |  3500 |     1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)

全てのカラムを取得対象とする場合は、*の省略形を使用できます。

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Apple     |   200 |    10 |
| Orange    |   150 |     3 |
| Pineapple |  1100 |     3 |
| Grapes    |  3500 |     1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)

条件指定(WHERE

SELECT FROM文はテーブルの全データを取得します。

そのため、一般的には条件指定のWHERE句を併用します。

mysql> SELECT * FROM items WHERE name = 'Apple';
+-------+-------+-------+
| name  | price | stock |
+-------+-------+-------+
| Apple |   200 |    10 |
+-------+-------+-------+
1 row in set (0.00 sec)

WHERE name = 'Apple'の部分がWHERE句です。

詳細は別途ドキュメントで解説しますが、上記サンプルはnameカラムの値が'Apple'のレコードを取得の対象とするように条件を設定しています。

更新(UPDATE SET

データの更新はUPDATE SET文を使います。

基本構文

UPDATE テーブル名 SET カラム = 値;

サンプル

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Apple     |   200 |    10 |
| Orange    |   150 |     3 |
| Pineapple |  1100 |     3 |
| Grapes    |  3500 |     1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)

___ih_hl_start
mysql> UPDATE items SET stock = 88;
___ih_hl_end
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Apple     |   200 |    88 |
| Orange    |   150 |    88 |
| Pineapple |  1100 |    88 |
| Grapes    |  3500 |    88 |
+-----------+-------+-------+
4 rows in set (0.00 sec)

条件指定(WHERE

UPDATE SET文は全レコードの値を更新することに注意が必要です。

特定レコードのみ更新する場合、WHERE句を併用して、更新対象の条件を設定します。

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Apple     |   200 |    10 |
| Orange    |   150 |     3 |
| Pineapple |  1100 |     3 |
| Grapes    |  3500 |     1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)

___ih_hl_start
mysql> UPDATE items SET price = 300 WHERE name = 'Apple';
___ih_hl_end
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Apple     |   300 |    10 |
| Orange    |   150 |     3 |
| Pineapple |  1100 |     3 |
| Grapes    |  3500 |     1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)

WHERE name = 'Apple'の部分がWHERE句です。

詳細は別途ドキュメントで解説しますが、上記サンプルはnameカラムの値が'Apple'のレコードを更新の対象とするように条件を設定しています。

特定レコードのみの更新の場合、WHERE句を忘れると意図しない操作になり、DBを含むシステムのデータ破壊につながる恐れがあります。

そのため、クエリの書き出しはWHEREから記述するなどの“WHERE句の付け忘れ防止対策”を行うことが推奨です。

削除(DELETE FROM

データ(レコード)の削除はDELETE FROM文を使います。

基本構文

DELETE FROM テーブル名;

サンプル

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Apple     |   300 |    10 |
| Orange    |   300 |     3 |
| Pineapple |   300 |     3 |
| Grapes    |   300 |     1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)

___ih_hl_start
mysql> DELETE FROM items;
___ih_hl_end
Query OK, 4 row affected (0.00 sec)

mysql> SELECT * FROM items;
Empty set (0.00 sec)

条件指定(WHERE

DELETE FROM文は全レコードを削除することに注意が必要です。

特定レコードのみ削除する場合、WHERE句を併用して、削除対象の条件を設定します。

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Apple     |   300 |    10 |
| Orange    |   300 |     3 |
| Pineapple |   300 |     3 |
| Grapes    |   300 |     1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)

mysql> DELETE FROM items WHERE name = 'Apple';
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Orange    |   300 |     3 |
| Pineapple |   300 |     3 |
| Grapes    |   300 |     1 |
+-----------+-------+-------+
3 rows in set (0.00 sec)

WHERE name = 'Apple'の部分がWHERE句です。

詳細は別途ドキュメントで解説しますが、上記サンプルはnameカラムの値が'Apple'のレコードを削除の対象とするように条件を設定しています。

特定レコードの削除の場合、WHERE句を忘れると意図しない操作になり、DBを含むシステムのデータ破壊につながる恐れがあります。

そのため、クエリの書き出しはWHEREから記述するなどの“WHERE句の付け忘れ防止対策”を行うことが推奨です。