MySQLのインストール〜DBの操作まで

### はじめに
MySQLの学習を始めるにあたって、知識を整理する事と備忘録として書き止めていきます。

### MySQLのインストール・バージョン確認
インストール
`brew install mysql`
インストールが成功したら、バージョン確認
`mysql -- version`
### MySQLの起動・停止・状態確認
MySQLの起動
`mysql.server start`
MySQLの再起動
`mysql.server restart`
MySQLの停止
`mysql.server stop`
MySQLの状態の確認
`mysql.server status`
[SUCCESS! MySQL running]と表記されれば、起動中
[ERROR! MySQL is not running]と表記されれば、停止中
### MySQLの動作確認
MySQLが起動している状態で以下コマンドを入力
root権限で動作しているかを確認するコマンド
`mysql -u root`
下記の様な出力が確認できたら成功

```
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.22 Homebrew

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>
```
上記の`mysql>`からSQL文を記述できる
ターミナルに戻る場合は以下の通りに記述

```
mysql> quit
```
###データベースの一覧表示
SQLのSHOW文を使う
`SHOW DATABASES;`
LIKEを使用して、表示するデータベース名のパターンを指定も可能
`SHOW DATABASES LIKE 'パターン'`

### データベースの新規作成
SQLのCREATE文を使う
`CREATE DATABASE データベース名;`
※データベース名は一意であり、同じ名前のデータベースを作成しようとするとエラーとなる

CHARACTER SET オプションを使用すると、文字コードを設定できる
`CREATE DATABASE データベース名 CHARACTER SET 文字コード;`

IF NOT EXISTSオプションを使用すると、データベースの名前が重複していてもエラーが出ない様にできる
※処理は何も行われない
`CREATE DATABASE IF NOT EXISTS データベース名`

### データベースの削除
SQLのDROP文を使う
`DROP TABLE テーブル名;`

### データベースの文字コードを調べる
SHOWを使用してデータベースの文字コードを調べる事ができる
`SHOW CREATE DATABASE データベース名`

```
+----------+----------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                                  |
+----------+----------------------------------------------------------------------------------------------------------------------------------+
| testDB   | CREATE DATABASE `testDB` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+----------------------------------------------------------------------------------------------------------------------------------+
```
上記の場合、
DEFAULT CHARACTER SET=クライアント側で使用する文字コード(utf8mb4)
デフォルト暗号化 = No

**テーブル操作に関する内容は以下のリンクからご確認頂けます**
[MySQLのテーブル操作](https://qiita.com/smileyuichi/items/448b2cc873e79e063a9f)


## <font color="red"> 以下はプラスαであり、筆者は動作未確認 </font>

### Sequel Proの導入
SequelProは、MySQLのデータをGUIで操作で管理するためのアプリケーション
Mac用みたいです
ここからダウンロードできる→ https://www.sequelpro.com/
**※注意**
**MySQL8から認証プラグインがセキュリティ強化のため、アプリ側が対応していないと接続できない仕様になっている**

#### 解決策:mysqlの認証プラグインの変更
caching_sha2_password・・・mysql8からの認証プラグイン
↓
mysql_native_password・・・mysql8以前の認証プラグイン

- 現在のプラグインの設定を確認(以下のコマンドで変更する)

`mysql> SELECT host, user, plugin FROM mysql.user;`

```
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | caching_sha2_password |
+-----------+------------------+-----------------------+
```

- プラグインを変更する

`ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';`

```
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | mysql_native_password |
+-----------+------------------+-----------------------+
```
上記の様に設定が変更できれば、SequelProから接続が可能になる。