SQL  ~データベースの操作2(テーブルとカラムの作り方)~

初学者です。SQLの理解が浅いため纏めていきます。

- MySQL
- Ruby on Rails

# はじめに
ここではSQLというDBを操作する言語について記述します。
中でも**テーブルとカラムについて**重点的に記述します。

※この記事は、前回の記事の続きです。

https://qiita.com/yumi1003/items/8dc8083884ebd6b9775e


# SQLによるテーブルの操作
次は**SQLによるテーブルの操作**についてです。

## データベースを指定する
まず最初に操作したいテーブルの存在しているデータベースを指定するとこから始まります。

# テーブルとカラムの作り方
その前にテーブルとカラムの作り方についてまとめます！(書いてなかったですね)

データベースの作成時と同様、**CREATE**を使います。
テーブルのですが、カラムも同時に作れます。記述は以下の通りです。

```
mysql> CREATE TABLE テーブル名 (カラム名1 カラム名1の型, カラム名2 カラム名2の型, …);
```

Railsでテーブルを作った時を思い出すと、**rails g model**でモデルを作り、同時にできたマイグレーションファイルにカラムの追加などをしたはずです。
そして、**rails db:migrate**で作成。。。という流れでしたが、
この後ろでは、ひっそりと**SQL文**が**CREATE TABLE**を実行してくれていたんです。(健気な子)


## USE
**USE**は、どのデータベースを使用するのかを指定するSQL文です。**USE データベース名**と記述します。

```
mysql> USE 任意のデータベース名;
Database changed
```

上記の記述で指定・使用できます！

ここで気になりました。**カラムの型はどう書くのか？**について！

## カラムの型(データの種類)
SQLでは、テーブルを作成するとき、**データ型**を指定することで、登録できるデータの種類を制限します。
RDBで扱うデータ型は、大きく分けて**文字列/数値/日付時刻の3種類**があります！

詳細はこちら様を参照させていただきます。
**他サイト:**[MySQLで使える すべてのデータ型 一覧](https://26gram.com/mysql-data-types)

# テーブルの構造を確認する

追加したカラムを確認するために、テーブルの構造を表示してみます。以下のようなSQL文で表せます。

```
mysql> SHOW columns FROM テーブル名;
```
**SHOW**に関しては全章で出てきましたね。
意味は、"データベースやテーブルを一覧表示できる"でした。
これでカラムの一覧表示ということになりますね！

続いて、初見のFROMについてです。詳細を下記に記述していきます!

## FROM
**FROM**は、対象となるテーブルを指定する時に使うSQLの句です。

```
mysql> FROM テーブル名;
```

**データベースの指定はUSE、
カラムの指定はFROM..。注意点ですね！**

先程のコマンドを実行しましょう！

```
mysql> SHOW columns FROM テーブル名;
```

以下のように表示されれば成功です！(例)

```
mysql> SHOW columns FROM goods;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
|カラム名 | カラム型( )  　| YES  |     | NULL    |       |
|カラム名 | カラム型( )    | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
```

# カラムの操作
次に、カラムの操作についてです。
更新、編集、削除について順にまとめて行きます！

## ALTER
カラム情報の更新には**ALTER**を使います！
**ALTER**は、データベースやテーブルを編集できるSQL文です。
**ALTER TABLE**を実行すると、テーブルに対してカラムの追加や削除ができます。
ちょっと情報がごちゃついてきたので例文で整理しましょう。

*↓ALTERでカラム情報の更新*

```
mysql> ALTER TABLE テーブル名 操作
```
*↓カラムを一つだけ追加する場合*

```
mysql> ALTER TABLE テーブル名 ADD カラム名 カラムの型;
```

*↓カラムを複数追加する場合*

```
mysql> ALTER TABLE テーブル名 ADD (カラム名 カラムの型, ……);
```

成功すると、以下のような表記になります！

```
mysql>  ALTER TABLE テーブル名 ADD (カラム名 カラム型);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
```

終わったら**SHOW columns FROM テーブル名**で確認します。

# カラムの変更
追加ができたところで変更についても知っておきましょう！
先ほどと同様、**ALTER TABLE**を使用し、以下のように記述します。

```
mysql> ALTER TABLE テーブル名　CHANGE 古いカラム名　新しいカラム名　新しいカラムの型;
```

カラム名(古)の後に、カラム名(新)と書き、カラム型に関しては、**変更後の新しいカラム型**のみ書きます。

以下のような記述になれば成功です!

```
mysql> ALTER TABLE テーブル名 CHANGE カラム名(古) カラム名(古) カラム型(新);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0
```
念の為、ここでも**SHOW columns FROM テーブル名**で確認します。

# カラムの削除
最後に、カラムの削除方法についてです！
カラムの削除でも、同じく**ALTER TABLE**を使うパターンです行きます。

```
mysql> ALTER TABLE テーブル名　DROP　カラム名;
```

成功すれば下記のようになります。

```
mysql> ALTER TABLE テーブル名 DROP カラム名;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
```

**SHOW columns FROM テーブル名**で確認です。


# まとめ
|DDL|データを定義する命令のこと|
|----|-------------------|
|CREATE|データベースやテーブルを作成できる文|
|SHOW|データベースやテーブルを一覧表示できる文|
|DROP|データベースやテーブルを削除できる文|
|USE|使用するデータベースの選択が出来る文|
|ALTER|データベースやテーブルを編集できる文|

ここまでお疲れ様でした！
ここまでまとめてて思ったことは、やはり手を動かしながらやった方がわかるということですね..

次回はテーブル操作**DML**についてまとめていきます！