SQL学習入門 | SQLでデータベース作成、テーブル作成を行ってみた

※学習中のため間違っている箇所があるかもしれません。

# はじめに
前回はSQL構文を書く際に必要なSQL Clientの設定まで完了しました。
今回はSQLの基本的な文法を学習していきます。
##### 使用環境：
- MySQL
- A5M2

## データベースとテーブル
まず簡単にデータベースとテーブルに関して学習していきましょう
### データベース
データベースとは簡単に言うと、`テーブル`を保存しておくための入れ物です。
データベース内には複数のテーブルがあり、データベースに接続することでそれらのテーブルに対して、検索、削除、登録といった操作を行うことができます。

### テーブル
テーブルとは「データ」を保存しておくための入れ物です。
表形式のデータ表があり、
例えば、userテーブルがある場合、テーブル内には複数のカラムが存在します。
nameカラム、addressカラム、ageカラム、emailカラム

#### userテーブル

|name|address|age|email|
|---|---|---|---|
|名前1|住所1|年齢1|メールアドレス1|
|名前2|住所2|年齢2|メールアドレス2|
|名前3|住所3|年齢3|メールアドレス3|

上記テーブルで
name,address,ageなどの単一の列をカラム
「名前1、住所1、年齢1、メールアドレス1」でまとまっている1行をレコードといいます。

テーブルはデータを新しく挿入する場合は、レコード単位でデータを挿入していきます。

言葉では伝わりにくい個所もあるためまずは実際に手を動かしていきましょう。

## 現在のデータベースの確認
まずは現在のデータベースの状況から確認していきましょう。
Queryタブの上部に「データベースを選択してください」とあります。
そこから前回作成したデータベースを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/339e4608-6999-4599-aaa0-afc0aaeceb4c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/fa8e95a3-a645-408c-ae22-6898f7eda63b.png)

### SHOW
データベースの確認をしたい場合、`SHOW`を使用します。
```sql
SHOW DATABASES;
```
このクエリを実行することで、現在存在するデータベース一覧を確認することができます。

#### 結果確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/16893363-3ab1-47dd-892d-6039dfadeb8d.png)

この段階ではMySQLで初期設定時に作成されているDBしかありません。
※「mysql-study」は「接続設定で名付けたラベル」にすぎません。
これはA5M2で設定された“接続名”であり、MySQL上に存在している実際のデータベースとは別物です。
実際の SHOW DATABASES; に表示されているのがMySQL上の実体（本物のデータベース）です。

## データベースの作成
データベースの確認が終了したので、次はデータベースの作成を行っていきます。

### CREATE
`CREATE`は使用することでテーブルやデータベースを作成することができます。
```sql
CREATE DATABASE mysqlstudy;
```
このsqlを実行することで「mysqlstudy」というデータベースを作成することができます。
構文は以下に記載します。
```
CREATE DATABASE データベース名;
```
a5m2でSQLを実行したい場合、
対象のSQL文にカーソルを置いて「Ctrl + Enter」を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/6f363da9-4ab0-4dab-9716-787abbd29bff.png)

または、左上の△マーク「SQLを実行・キャレット位置」をクリックすることで実行できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/16cb2112-459e-4f4a-9672-293eddb48166.png)

#### 結果確認
以下のように「1件のレコードを操作しました。」となった場合、正常に完了しています。
※DATABASEの命名に関して、基本的にDB名やテーブル名には「-」は含めることができないので注意していください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/98459fff-d1d9-4687-86fd-65152ed8872d.png)

コマンドで確認すると正常に「mysqlstudy」が作成されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/0f1fc275-2bb6-40a2-8ff3-b226831c0f31.png)

## テーブルの作成
次はデータベース内にテーブルを作成していきます。

テーブルを作成するためにはまず、先ほど作成した「mysqlstudy」に接続し、テーブル操作を行える状態にします。

### USE(DB接続)
USEを使用することで対象DBにアクセスすることができます。
※USE文を実行せずにCREATE TABLEなどを行うと、エラーになるか、別のデフォルトDBに作成されてしまうことがあります。
必ず対象DBに接続してから操作を行いましょう。
```sql
USE mysqlstudy;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/530164b2-ad12-4ee0-8c67-439df48b8b67.png)

### テーブル作成
データベースにアクセス後、テーブルを作成していきます。
テーブルを作成するためにも`CREATE`を使用します。

ただ、テーブルはデータベースと違い、データ構造を指定する必要がある点に注意してください。

今回は簡単なユーザーテーブルを作成していきます。
#### CREATE文
```sql
CREATE TABLE users (
  id int AUTO_INCREMENT not null primary key,
  name varchar(50),
  email varchar(50),
  role ENUM('USER', 'ADMIN'),
  created_by varchar(50),
  updated_by varchar(50),
  created_at timestamp default current_timestamp,
  updated_at timestamp default current_timestamp,
  delete_flg boolean 
);
```

別の記事で使用しているものですが、
このユーザーsql文を実行することでテーブルを作成することができます。

構文は以下になります
```
CREATE TABLE テーブル名称 (
    カラム名 データ型 オプション,
    カラム名 データ型 オプション
)
```

※補足：上記の型やオプションに関して簡単に説明すると、
int:数値を示すデータ型
`varchar(50)`:50文字までの文字列型
`ENUM('USER', 'ADMIN')`:特定の文字列'USER','ADMIN'のどちらかのみを設定できる
`timestamp`:日付形式
`boolean`: true/false（MySQLでは`TINYINT(1)`として保存される）
booleanは実際には0(偽)、1(真)で判定されます。

今回のカラム構成は、以下のような用途を想定しています：
- `role`：権限による画面・操作制御
- `created_by / updated_by`：操作ユーザーの記録
- `delete_flg`：削除フラグによる論理削除対応

実務では「updated_atの自動更新」や「論理削除（delete_flg）」などの設計がよく使われます。
今回のテーブルもその実務を意識した構成になっています。

詳しくはまた別の記事で解説しますが、今はこのぐらいの認識で大丈夫です。

### 結果確認
確認すると、usersテーブルが作成されているのがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/ef37e890-f64c-4d22-a8b3-6e400903823c.png)
GUI上でも作成されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155918/0fed6c62-3665-4911-aa80-7623f4c7d3f8.png)


今後はこちらのusersテーブルを使用して基本構文の学習を進めていきます。


# まとめ
今回はデータベース、テーブルの作成に関して解説していきました。

業務で触れる機会がない方もいると思いますが、
基本的な構文なので、書き方はしっかり覚えておきましょう。

次回はこのテーブルを利用して基本構文
`INSERT`,`SELECT`,`DELETE`,`UPDATE`
を学習していく予定です。

引き続き、SQLの基礎力を高める学習記事を投稿していきます！

※この記事で使用しているSQLスクリプトやDB定義は、別途GitHubにて公開予定です。

[前：SQL学習入門 | 業務現場で使用されているA5:SQL Mk-2のセットアップ手順を解説してみた](https://qiita.com/suica1010/items/691e6eff4a6649fa7bb5)

[次：SQL学習入門 | INSERT/SELECT/DELETE/UPDATE　基本構文を学習してみた](https://qiita.com/suica1010/items/f28774e16e7f589029ef)