MacでMySqlの環境構築

# はじめに
最近、バックエンドの勉強もするようになり、MySQLの環境構築をする必要があったので、備忘録として残しておきます。

# MySQLのインストール

Homebrewで以下のコマンドを使ってインストールします。

```bash
brew install mysql
```

Homebrewをインストールしてない方は[こちら](https://blog.kikagaku.co.jp/homebrew-install-howto/)を参照してインストールしてください。

以下のコマンドを実行し、バージョンが表示されていれば無事にインストールされています。

```bash
mysql --version
```

# MySQL初回起動

以下のコマンドでMySQLを起動できます。

```bash
brew services start mysql
```

起動できたら、次のコマンドを実行し、セキュリティの設定をします。
こちらの設定は初回起動時の一回だけで問題ないです。

```bash
mysql_secure_installation
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/337538ea-2119-0b32-8e69-47b7f144e0df.png)

パスワードを設定する際に、厳しい設定にするプラグインを使用するか確認されます。
お好みで`Yes`か`No`を選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/bfadf74e-0fee-0d6d-d0ff-3beeace39a84.png)

MySQLにはデフォルトで匿名ユーザー（名前なしでログインできるユーザー）が存在するので、削除するため`y`を入力してEnter。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/d7a572a9-2993-8025-184d-f82f05d044f6.png)


セキュリティ強化のため、ルートユーザーのリモートからのログインを禁止したいので、`y`を入力してEnter。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/908716b0-3795-ad55-1678-43b872ed4c73.png)

MySQLにはデフォルトで「test」というデータベースが含まれており、誰でもアクセスできるようになっています。セキュリティ向上のために、このデータベースを削除します。`y`を入力してEnter。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/8abcb016-755c-60ad-6cdd-77237fd47d58.png)

上記で設定したことを即座に反映するため、`y`を入力してEnter。

# ログイン
以下のコマンドでログインします。
パスワードが求められるので、[MySQL初回起動](#mysql初回起動)のセキュリティの設定で設定したパスワードを入力します。

```bash
mysql --user=root --password
```

# データベース作成
ログインできたら、以下のコマンドでデータベースを作成できます。
(sampleには作成するDatabaseの名前を指定してください）

```
CREATE DATABASE sample;
```

# データベース選択

以下のコマンドでデータベースの一覧を確認できます。
[データベース作成](#データベース作成)で作成したデータベースが確認できるはずです。

```
SHOW DATABASES;
```

一覧の中で、どのデータベースを使うかは`USE データベース名`で選択できます・

```
USE sample;
```

現在、どのデータベースを選択しているかは`SELECT database();`で確認できます。

# テーブル作成
データベースを選択したらテーブルを作成します。

作成するコマンドは、以下の形式です。
`CREATE TABLE テーブル名 (列名1 列名1のデータ型, 列名1 列名1のデータ型, ...);`

データ型については下記を参照してください。

https://dev.mysql.com/doc/refman/8.0/ja/data-types.html

サンプルを下記に載せておきます。

```bash
CREATE TABLE users (\
id INT,\
name VARCHAR(45) NOT NULL,\
email VARCHAR(45) NOT NULL,\
password VARCHAR(60) NOT NULL,\
description TEXT,\
created DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\
updated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\
locked DATETIME,\
PRIMARY KEY(id),\
UNIQUE KEY(email));
```

列のデータ型の後ろには、nullを許容するか、Default値などを設定できます。

# テーブルの確認

`DESCRIBE テーブル名;`で、テーブルの定義内容が確認できます。

```
DESCRIBE users;
```
# データの登録
せっかくなので、データの登録までしたいと思います。

## データの追加

`INSERT INTO users (列A, 列B, ...) VALUES (列Aの値, 列Bの値, ...);`で、データを追加できます。

### usersの例
```
INSERT INTO users (id, name, email, password, description, locked) VALUES (1, "User1", "user1@example.com", "user0001", NULL, NULL);
```

デフォルト値でいい列は、指定しなくても大丈夫です。例で言うと、createdやupdated。

## データの確認

`SELECT * FROM テーブル名;`を使い、テーブルのデータを確認できます。

```
SELECT * FROM users;
```

# 終了
まずMySQLから下記のコマンドでログアウトします。
```
exit;
```

MySQLにログイン中かどうかは、ターミナルのコマンド入力部分を確認すればわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/c77695cd-8ef6-ef7a-6757-39b1e4a4ede5.png)

ログアウトした後、下記のコマンドでMySQLを停止します。

```
brew services stop mysql
```