なんで書いたの?
MySQLについて学習した内容をアウトプットする目的で、適当なデータベースを作って(DBeaverなどは使わず)ターミナル上でコマンド操作して色々いじってみました。
※見て頂くと検討つくと思うのですが、私は乃木坂46・日向坂46のファンです。が、ここで作ったものは架空のものですので、その点お含み置きください。
目次
- AWSのRDSでMySQLサーバーを立ち上げる
- AWS公式ドキュメントを元に、RDSで起動中のMySQLサーバーに管理者としてログイン
- 下記内容をいじってみる
<具体的には>
- DBの作成
- DBの表示
- 使用するデータベースを選択
- テーブルの作成
- テーブルへレコードを挿入
- テーブルを表示
- テーブル名/インデックス名/カラム名を追加・変更
- 新しいカラムを追加した後に、追加したカラムを消去する
- 真偽値と登録日時をカラムとして追加してみる
- 後から主キー(Primary-key)を設定する
- AUTO_INCREMENTを追加する
##1. AWSのRDSでMySQLサーバーを立ち上げる
やったことはざっと下記の通り。
- 無料枠でMySQLのDBを作成
- マスタユーザー(=管理者)の認証情報を入力(ユーザー名とパスワード)
- どのVPC(仮想ネットワーク)でRDSを実行させるか設定
- セキュリティグループで、「インバウンドのルールの編集」で、タイプ -> MySQL/Aurora、プロトコル -> TCP、ポート範囲 -> 3306、ソース -> 任意の場所,0.0.0.0/0, ::/0で設定(学習用のため任意の場所で設定)
##2. AWS公式ドキュメントを元に、RDSで起動中のMySQLサーバーに管理者としてログイン
公式ドキュメントの「MySQL クライアントからの接続」を参照し、適切なエンドポイントと、MySQLマスタユーザー(=管理者)でコマンド操作
mysql -h <endpoint> -P 3306 -u <mymasteruser> -p
すると、パスワードが求められるので、入力しログイン成功!
USER:~ user$ mysql -h ****.rds.amazonaws.com -P 3306 -u admin -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 29
Server version: 8.0.20 Source distribution
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
##3.下記のコマンドを試しにやってみる
###DBの作成
mysql> CREATE DATABASE HINATAZAKA_DB;
Query OK, 1 row affected (0.06 sec)
###DBの表示
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| HINATAZAKA_DB |
| NOGIZAKA_DB |
| information_schema |
| mysql |
| performance_schema |
| testdb |
+--------------------+
6 rows in set (0.05 sec)
###使用するデータベースを選択
※この操作を入れないと、テーブル・カラムを操作する時にDBの名前.処理内容
といちいち書かないといけないのは面倒だと思い、調べてやってみた。
mysql> USE NOGIZAKA_DB;
Database changed
mysql> USE testdb ;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
###テーブルの作成
mysql> CREATE TABLE blogs ( id int, name varchar(10));
Query OK, 0 rows affected (0.07 sec)
###テーブルへレコードを挿入
mysql> INSERT INTO blogs (id ,name) VALUES
-> (1,"KAKI"),
-> (2,"ASYU"),
-> (3,"MATYU");
Query OK, 3 rows affected (0.06 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM blogs;
+------+-------+
| id | name |
+------+-------+
| 1 | KAKI |
| 2 | ASYU |
| 3 | MATYU |
+------+-------+
3 rows in set (0.06 sec)
###テーブルを表示
mysql> SHOW columns FROM blogs;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| watcher | int | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
###テーブル名/インデックス名/カラム名を追加・変更
mysql> ALTER TABLE blogs ADD watcher int;
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW columns FROM blogs;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| watcher | int | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.05 sec)
###新しいカラムを追加した後に、追加したカラムを消去する
mysql> ALTER TABLE blogs ADD comments varchar(10);
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW columns FROM blogs;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| watcher | int | YES | | NULL | |
| comments | varchar(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.05 sec)
mysql> ALTER TABLE blogs drop comments;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW columns FROM blogs;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| watcher | int | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.05 sec)
###真偽値と登録日時をカラムとして追加してみる
mysql> ALTER TABLE blogs ADD is_draft BOOL;
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE blogs ADD created DATETIME;
Query OK, 0 rows affected (1.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW columns FROM blogs;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| watcher | int | YES | | NULL | |
| is_draft | tinyint(1) | YES | | NULL | |
| created | datetime | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.04 sec)
mysql> INSERT INTO blogs (id,name,watcher,is_draft,created) VALUES (5,"YUTTAN",40,TRUE,2020-10-10);
Query OK, 1 row affected, 1 warning (0.05 sec)
mysql> SELECT * FROM blogs;
+----+--------+---------+----------+---------------------+
| id | name | watcher | is_draft | created |
+----+--------+---------+----------+---------------------+
| 1 | KAKI | NULL | NULL | NULL |
| 2 | ASYU | NULL | NULL | NULL |
| 3 | MATYU | NULL | NULL | NULL |
| 5 | YUTTAN | 40 | 1 | 0000-00-00 00:00:00 |
+----+--------+---------+----------+---------------------+
4 rows in set (0.04 sec)
###後から主キー(Primary-key)を設定する
mysql> ALTER TABLE blogs ADD PRIMARY KEY(id);
Query OK, 3 rows affected (0.08 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SHOW columns FROM blogs;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(10) | YES | | NULL | |
| watcher | int | YES | | NULL | |
| is_draft | tinyint(1) | YES | | NULL | |
| created | datetime | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.03 sec)
###AUTO_INCREMENTを追加する
mysql> ALTER TABLE blogs MODIFY id INT AUTO_INCREMENT ;
Query OK, 3 rows affected (0.16 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SHOW columns FROM blogs;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(10) | YES | | NULL | |
| watcher | int | YES | | NULL | |
| is_draft | tinyint(1) | YES | | NULL | |
| created | datetime | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
5 rows in set (0.04 sec)
#最後に
DBeaver・MySQLWorkbenchなどDBクライアントを使うと圧倒的に早くSQLを書き、挙動もすぐに確認できるメリットを痛感しました。ただ、全然書いたことがない人が、いきなりそれに手を出すと、エラーに対して適切に原因を調査して書き直すというスキルが身につきにくいかな??と感じました。
もっともっとやれることがたくさんあります(集計関数・結合など)が、その部分も一通り学習できたタイミングでアウトプットとして載せていけたらと思います^^
参考
MySQL データベースエンジンを実行している DB インスタンスに接続する:MySQL クライアントからの接続
MariaDB データベースエンジンを実行している DB インスタンスへの接続