AWS Cloud9でMySQLを利用する方法

#概要
AWS Cloud9の環境にてMySQLの初期設定、データベースの作成、テーブルの作成、カラムの作成という一連の作業ができることの確認を目的としています。
なお、今回使用するMySQLはAWS Cloud9に最初からインストールされているものを使用しています。

#MySQLのバージョンを確認
今回利用するバージョンは下記になります。

```
$ mysql --version
mysql  Ver 14.14 Distrib 5.5.60, for Linux (x86_64) using readline 5.1
```

# /etc/my.cnfの編集
文字コードにUTF-8を利用するための設定を行なってください。

```
sudo vi /etc/my.cnf
[mysqld]
...
character-set-server=utf8 #mysqldセクションの末尾に追加

[client]
default-character-set=utf8 #clientセクションを追加
```

#MySQLのステータスを確認(停止状態)
MySQLの状態が停止状態であることを確認します。

```
$ sudo service mysqld status
mysqld is stopped
```

#MySQLの起動
下記のコマンドでMySQLを起動してください。

```
$ sudo service mysqld start
Starting mysqld:                                           [  OK  ]
```

#MySQLのステータスを確認(起動状態)
MySQLが起動中であることを確認します。

```
$ sudo service mysqld status
mysqld (pid  6367) is running...
```

#MySQLへの接続
MySQLへは下記のコマンドでログインすることができます。
※初期パスワードは何も入力しないでEnterを押してください。

```
$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.60 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, 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>
```

#MySQLで使用されている文字コードの確認
使用されている文字コードを確認します。
utf8が利用されていることを確認してください。

```
mysql> SHOW VARIABLES LIKE "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
```

#データベース作成
データベースを作成してみましょう。
今回は「sample」という名前でデータベースを作成しています。

```
mysql> CREATE DATABASE sample;
Query OK, 1 row affected (0.00 sec)


mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sample             |
| test               |
+--------------------+
5 rows in set (0.00 sec)
```

# テーブルの作成
次にテーブルの作成になります。
今回は「todos」という名前のテーブルを作成しています。

```
mysql> USE sample;
Database changed

mysql> CREATE TABLE sample.todos (
    ->     id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    ->     done BOOLEAN,
    ->     task TEXT
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW TABLES;
+------------------+
| Tables_in_sample |
+------------------+
| todos            |
+------------------+
1 row in set (0.00 sec)

mysql> DESCRIBE todos;
+-------+------------+------+-----+---------+----------------+
| Field | Type       | Null | Key | Default | Extra          |
+-------+------------+------+-----+---------+----------------+
| id    | int(11)    | NO   | PRI | NULL    | auto_increment |
| done  | tinyint(1) | YES  |     | NULL    |                |
| task  | text       | YES  |     | NULL    |                |
+-------+------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
```

#カラムの挿入
実際にカラムを挿入してみましょう。

```
mysql> INSERT INTO todos(done, task) VALUES(false, 'タスク1');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> INSERT INTO todos(done, task) VALUES(false, 'タスク2');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> INSERT INTO todos(done, task) VALUES(false, 'タスク3');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql>

mysql> SELECT * FROM sample.todos;
+----+------+------------+
| id | done | task       |
+----+------+------------+
|  1 |    0 | タスク1    |
|  2 |    0 | タスク2    |
|  3 |    0 | タスク3    |
+----+------+------------+
3 rows in set (0.00 sec)

mysql> 
```

#カラムの更新
正常にカラムがUpdateできるか確認します。

```
mysql> UPDATE todos SET done=true, task='タスク11' WHERE id=1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM sample.todos;
+----+------+-------------+
| id | done | task        |
+----+------+-------------+
|  1 |    1 | タスク11    |
|  2 |    0 | タスク2     |
|  3 |    0 | タスク3     |
+----+------+-------------+
3 rows in set (0.00 sec)
```

#カラムの削除
正常にカラムが削除できるか確認します。

```
mysql> DELETE FROM sample.todos WHERE id=1;
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM sample.todos;
+----+------+------------+
| id | done | task       |
+----+------+------------+
|  2 |    0 | タスク2    |
|  3 |    0 | タスク3    |
+----+------+------------+
2 rows in set (0.00 sec)
```

#カラムの削除（全件）
カラムの全件削除ができることを確認します。

```
mysql> DELETE FROM sample.todos;
Query OK, 2 rows affected (0.01 sec)

mysql> SELECT * FROM sample.todos;
Empty set (0.00 sec)
```

#テーブルの削除
テーブルの削除ができることを確認します。

```
mysql> DROP TABLE todos;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW TABLES;
Empty set (0.00 sec)
```

#データベースの削除
データベースの削除ができることを確認します。

```
mysql> DROP DATABASE sample;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
```

以上です。