データベース初心者のためのMySQLチュートリアル

# データベースとは
一定の形式で整理されたデータの集まりです。データベースを効率よく管理、運用するソフトウェアをデータベース管理システムと言います。

# MySQLとは
![mysql.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264684/4e972b2e-4003-52d5-77f0-3a24645c7d08.png)

MySQLは、オープンソースで公開されている関係データベース管理システム(リレーショナルデータベース)です。リレーショナルデータベースを略して、RDBと言ったりします。
オープンソースのRDBには,MySQLの他にSQLiteやPostgreSQLなどがあります。
[こちら](https://db-engines.com/en/ranking)のサイトでは、データベースランキング2位になっております。
MySQLはWordpressにも使われています。

# MySQLの特徴
- wordpressで使われている
- オープンソースで無料
- Windows、Mac OS、LinuxなどOSで利用が可能
- 大規模なサービスでも運用可能
- GUIツールがある(phpMyAdmin、MySQL Workbenchなど)

# 環境構築
##### Homebrew をインストール(インストール済みの方はしなくていいです)
HomebrewはMacのバージョン管理ツールです。Mysqlをインストールするために使います。

```
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

##### mysqlをインストール
brewコマンドでMysqlをインストールします。

```
brew install mysql
```

##### mysqlのサーバーを起動
mysqlのサーバーを下記のコマンドで起動しましょう。正常に作動がすれば、`success`と表示されます。

```
mysql.server start
Starting MySQL
 SUCCESS!
```

##### mysqlにログイン
mysqlにはIDとパスワードがあり、デフォルトでは、IDが`root`で、パスワードが未設定となっております。なので、下記のコマンドでログインすることができます。

```
$ mysql -u root -p
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 8.0.18 Homebrew

Copyright (c) 2000, 2019, 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から抜け出す
MySQLにログインできたら、`mysql> `のようなコマンドが左側に表示されます。`exit`コマンドを入力すると抜け出すことができます。

```
mysql> exit
Bye
```

##### パスワードを設定

mysqlのパスワードがないとセキュリティ上、よくないので、下記のコマンドでパスワードを設定します。

```
mysql_secure_installation
```

##### パスワード付きのユーザーにログイン
パスワード付きのユーザー(今回はroot)にログインするには、下記のようなコマンドを実行します。

```
mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.18 Homebrew

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

### データベースシステム用語集
#### データベースとテーブル
データベースは複数のテーブルを持っています。基本的にプロジェクトごとに1つのデータベースを持ちます。
例えば、「test-project」というデータベースがあり、その中に複数テーブルを作ります。
テーブルは入れるデータの種類ごとに別々の名前でテーブルを作成します。
例えば、ユーザーのメールアドレスやパスワードを入れるテーブルを「users」テーブルと定義したり、投稿データを入れるテーブルを「posts」テーブルとしたり、タスクデータを入れるテーブルを「tasks」テーブルとしたりします。

![test-project (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264684/b0955964-b079-a769-223b-935cd0a7ff18.png)


#### カラムとレコード
カラムとは、テーブルの縦の列のことを言います。カラムごとで、入れるデータの種類を定義します。
レコードはテーブルの横の行で、実際にデータを追加していきます。

![レコード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264684/dac82634-0947-e0b5-86c1-5f449ca2c9fe.png)

## コマンドを実行してデータベースを操作しよう
### データベースの一覧を表示
rootユーザーでmysqlにログインして、`SHOW DATABASES`を実行して、データベース一覧を表示しましょう。

```
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.26 sec)
```

### データベースへの作成
新しくデータベースを作成しましょう。

```
mysql> CREATE DATABASE test_project;
```

データベースの作成ができたら、確認しましょう。

```
mysql> SHOW DATABASES;
```

### test_projectのデータベースを選択

```
mysql> USE test_project;
```

### テーブル一覧を表示
テーブルは今のところないので「Empty set (0.01 sec)」と表示されれば良いです。

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

### テーブルを作成


```
mysql> CREATE TABLE users(
    id INT(11) AUTO_INCREMENT NOT NULL, 
    name VARCHAR(30) NOT NULL ,
    age INT(3) NOT NULL,
    PRIMARY KEY (id));

Query OK, 0 rows affected, 2 warnings (0.04 sec)
```

### テーブルの一覧表示

```
mysql> show tables;
+------------------------+
| Tables_in_test_project |
+------------------------+
| users                  |
+------------------------+
```


### 参考
https://www.sejuku.net/blog/8763#i
https://www.kagoya.jp/howto/webhomepage/mysql/