1
Help us understand the problem. What are the problem?

posted at

updated at

MySQLの基本操作のまとめ①

SQLを使ったことがないので、勉強メモを残します。
使用環境

  • windows10

  • MySQL8.0.24

基本操作

  • CREATE DATABASES:データベースの作成

  • SHOW DATABASES:データベースの一覧表示

  • CREATE TABLE:テーブル作成

  • SHOW CREATE TABLE:テーブルの表示

  • INSERT:テーブルにデータを挿入

  • SELECT:テーブルからデータを取得

  • UPDATE:データを上書き

  • DELETE:データを削除

  • ALTER:テーブルにカラムを追加

CREATE DATABASES

まず、テーブルを作る前に「PRACTICE」という名前のDATABASEを作成。

CREATE DATABASE [データベース名];

実行結果

mysql> CREATE DATABASE PRACTICE;
Query OK, 1 row affected (0.02 sec)

SHOW DATABASES

DATABASE一覧の表示。上記で作成した「practice」があることが確認できる。

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| practice           |
| sakila             |
| sys                |
| world              |
+--------------------+
7 rows in set (0.00 sec)

CREATE TABLE

1.まず使用するデータベースを選択する。これを選択しないとテーブルの作成ができない。

USE [データベース名];

実行結果

mysql> USE PRACTICE;
Database changed

2.テーブルを作成する。今回はオプション無しで作成する。

CREATE TABLE [テーブル名] (
    column1 [データ型] [その他オプション],
    column2 [データ型] [その他オプション],
    column3 [データ型] [その他オプション],
);

作成したのがこちらのTESTテーブル。

mysql> CREATE TABLE TEST(
    -> ID INTEGER,
    -> NAME TEXT,
    -> ENGLISH INTEGER,
    -> MATH INTEGER
    -> );
Query OK, 0 rows affected (0.07 sec)

SHOW CREATE TABLE

前のCREATE TABLEで作成したテーブルを確認。

SHOW CREATE TABLE [テーブル名];

実行結果

mysql> SHOW CREATE TABLE TEST;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                             |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| TEST  | CREATE TABLE `test` (
  `ID` int DEFAULT NULL,
  `NAME` text,
  `ENGLISH` int DEFAULT NULL,
  `MATH` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

INSERT

指定したテーブルにデータを挿入する。

INSERT INTO [テーブル名] ([column1], [column2], [column3]) VALUES ([値1], [値2], [値3]); 

実行結果

mysql> INSERT INTO TEST (ID, NAME, ENGLISH, MATH) VALUES (1, 'RISA', 80, 90);
Query OK, 1 row affected (0.01 sec)

なお、以下のINSERT文(カラム指定なし)でもデータの挿入が可能。

mysql> INSERT INTO TEST VALUES (2, 'TARO', 75, 60);
Query OK, 1 row affected (0.01 sec)

SELECT

SELECT * FROM [テーブル名];

先ほどINSERTしたデータを確認。挿入したデータが登録されていることが確認できる。

mysql> SELECT * FROM TEST;
+------+------+---------+------+
| ID   | NAME | ENGLISH | MATH |
+------+------+---------+------+
|    1 | RISA |      80 |   90 |
|    2 | TARO |      75 |   60 |
+------+------+---------+------+
2 rows in set (0.00 sec)

また、テーブルデータのカラムを指定して表示させる場合、以下の文で表示可能。

mysql> SELECT ID, NAME FROM TEST;
+------+------+
| ID   | NAME |
+------+------+
|    1 | RISA |
|    2 | TARO |
+------+------+
2 rows in set (0.00 sec)

条件付きで表示させる場合は、以下の文で表示可能。


mysql> SELECT * FROM TEST WHERE ID = 1;
+------+------+---------+------+
| ID   | NAME | ENGLISH | MATH |
+------+------+---------+------+
|    1 | RISA |      80 |   90 |
+------+------+---------+------+
1 row in set (0.00 sec)

UPDATE

UPDATE文はデータを更新するので、元のデータは消えてしまう。
WHERE句を使わずにデータを更新しようとすると、全てのデータを上書きしてしまう可能性あり。
今回は NAME = RISA の ENGLISH を 0 に上書きする。

UPDATE [テーブル名] SET [colum1] = [値1], [colum2] = [値2], ... WHERE [条件式];
mysql> UPDATE TEST SET ENGLISH = 0 WHERE NAME = "RISA";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

更新ができているか確認のためSELECT文を実行。NAME = RISA の ENGLISH を 0 に上書きできた。

mysql> SELECT * FROM TEST;
+------+------+---------+------+
| ID   | NAME | ENGLISH | MATH |
+------+------+---------+------+
|    1 | RISA |       0 |   90 |
|    2 | TARO |      75 |   60 |
+------+------+---------+------+
2 rows in set (0.00 sec)

DELETE

DELETE文は条件を指定しないと、テーブル中の全てのレコードを削除してしまう。以下のようにWHERE句を組み合わせて、条件に当てはまるレコードだけを選択削除する。

元のデータは以下。

mysql> SELECT * FROM TEST;
+------+-------+---------+------+
| ID   | NAME  | ENGLISH | MATH |
+------+-------+---------+------+
|    1 | RISA  |       0 |   90 |
|    2 | TARO  |      75 |   60 |
|    3 | RENA  |      65 |  100 |
|    4 | ASUKA |      80 |   80 |
+------+-------+---------+------+
4 rows in set (0.00 sec)

ここから ID = 4 のデータを削除する。

DELETE FROM [テーブル名] WHERE [条件式];

実行結果と確認のためSELECT文実行。ID = 4 のデータが削除されていることが確認できる。

mysql> DELETE FROM TEST WHERE ID = 4;
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM TEST;
+------+------+---------+------+
| ID   | NAME | ENGLISH | MATH |
+------+------+---------+------+
|    1 | RISA |       0 |   90 |
|    2 | TARO |      75 |   60 |
|    3 | RENA |      65 |  100 |
+------+------+---------+------+
3 rows in set (0.01 sec)

レコードまるごとではなく、特定のカラムのデータのみ削除したい場合は、UPDATE文を使う。
「指定したカラムのデータをNULLに上書きする」といった処理を行う。NULLは「何もない」という意味を表す。

UPDATE [テーブル名] SET [column1] = NULL WHERE [条件式]

ID = 3 の NAME を NULL にする。

mysql> UPDATE TEST SET NAME = NULL WHERE ID = 3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM TEST;
+------+------+---------+------+
| ID   | NAME | ENGLISH | MATH |
+------+------+---------+------+
|    1 | RISA |       0 |   90 |
|    2 | TARO |      75 |   60 |
|    3 | NULL |      65 |  100 |
+------+------+---------+------+
3 rows in set (0.00 sec)

ALTER

テーブルにカラムを追加する場合、以下のALTER文で追加可能。

ALTER TABLE [テーブル名] ADD [column] [データ型]

カラム名「SOCIETY」、データ型「INTEGER」の列を追加した結果が以下。
追加されたカラムにはNULLが入っている。

mysql> ALTER TABLE TEST ADD SOCIETY INTEGER;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM TEST;
+------+------+---------+------+---------+
| ID   | NAME | ENGLISH | MATH | SOCIETY |
+------+------+---------+------+---------+
|    1 | RISA |       0 |   90 |    NULL |
|    2 | TARO |      75 |   60 |    NULL |
|    3 | NULL |      65 |  100 |    NULL |
+------+------+---------+------+---------+
3 rows in set (0.00 sec)

参考文献

以下の文献を参考にさせていただきました。ありがとうございます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?