～未経験・知識なしからセキュリティ(デフ)エンジニアになる人！～『{Level7}MySQL >データベース作成～フィールド変更』

こんばんは、itoshinです!
昨日は季節の変化にやられたのか体調が悪く、
資格勉強、Qiita投稿もできずにダウンしてました(^^;
肌寒くなってきましたからね。体を冷やさないようにしましょう。
~~(3日分くらい記事ネタストックできたやったー！)~~

さて、前回はMySQLの勉強を開始して
+ mysqlクライアントの起動（rootさん）
+ データベースの作成
+ ユーザー作成
+ 作成したユーザーに権限付与
までやりました。

付与できる権限については今後学んでいく中で触れていこうと思います！
では、itoshinを呼び出して始めていきます。
```
PS C:\Users\Admuser> mysql -u itoshin -p;
Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.40 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

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.
```
### テーブルの作成
前回はデータの集合の器であるデータベースを作成しました。
壺を収める桐箱のようなものだと思ってください。
今回作成するのは箱に収める壺のようなもの・・・
『テーブル』を作成していきます！
これがないと、この先で話すレコードというデータベースを利用する人が本当に知りたい情報を入れることができません。
Excelで例えると、ワークシートのようなものだと言われます。
まず、テーブルを作りたいデータベースを指定して・・・
``use basic;``
[basicデータベースに移動して]

``create table hukusyuuyou``
``(uid varchar(7), passwd varchar(15), uname varchar(20), family int);``
[hukusyuuというテーブルを作って]
[ユーザID（7文字以内）、パスワード（15文字以内）、ユーザ名（20文字以内）、家族人数（数字のみ）という設定でね！] 

後々、説明するのですが、テーブルの中の情報を分類するための項目がフィールド、といいます。各項目の後に続くカッコ内の数字やINTはレコード（情報）の入力条件を指定しますよってことです。
```
mysql> use basic;
Database changed
mysql> create table hukusyuuyou
    -> (uid varchar(7), passwd varchar(15), uname varchar(20), family int);
Query OK, 0 rows affected (0.05 sec)

```
ちゃんとテーブルが作成できたか確認してみましょう。
``show tables`` ※showを使う時は複数形にするのを忘れずに！
[テーブルを見せて]

問題なく作成されてますね。↓
```
mysql> show tables;
+-----------------+
| Tables_in_basic |
+-----------------+
| hukusyuuyou     |
| usr             |
+-----------------+
2 rows in set (0.03 sec)
```
### フィールドの追加
さて、次はフィールドの追加、欲しい情報の項目を追加してみましょう。
今の復習用テーブルのフィールドはどうなっているでしょう？↓
```
mysql> show fields from hukusyuuyou;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| uid    | varchar(7)  | YES  |     | NULL    |       |
| passwd | varchar(15) | YES  |     | NULL    |       |
| uname  | varchar(20) | YES  |     | NULL    |       |
| family | int         | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
```
↑uid,passwd,uname,familyが今集められる情報の項目になっていますね。
これとは別にレコード（情報）をアップデートした日付を収める場所を作りたいです。
updatedという項目を追加してみます。
``alter table hukusyuuyou add updated date after family;``
[hukusyuuyouテーブルのfamily項目の後ろに、日付情報のみ記録できるupdatedという項目を追加して]


```
mysql> alter table hukusyuuyou add updated date after family;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0
```
### 追加したフィールドを確認

念のため、追加されているか確認してみましょう。
実際の現場でも確認は超重要のはずですからね！
``show fields from hukusyuuyou;``
[hukusyuuyouテーブルのfield達を見せて]
```
mysql> show fields from hukusyuuyou;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| uid     | varchar(7)  | YES  |     | NULL    |       |
| passwd  | varchar(15) | YES  |     | NULL    |       |
| uname   | varchar(20) | YES  |     | NULL    |       |
| family  | int         | YES  |     | NULL    |       |
| updated | date        | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.01 sec)
```
↑ちゃんと追加されていました。
これで、明日以降のレコード登録時にアップデート日の情報も収めることができますね。

### 追加したフィールドを削除、削除されたかを確認
追加のやり方が理解できたので、削除の仕方も知っておきましょう。
``alter table hukusyuuyou drop updated;``
[hukusyuuyouテーブルのupdatedの項目を削除して]

せっかく作成したのにボツになることはよくあります。
削除したら、こちらもしっかり確認をしておきましょう。
``show  fields from hukusyuuyou;``
```
mysql> alter table hukusyuuyou drop updated;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show  fields from hukusyuuyou;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| uid    | varchar(7)  | YES  |     | NULL    |       |
| passwd | varchar(15) | YES  |     | NULL    |       |
| uname  | varchar(20) | YES  |     | NULL    |       |
| family | int         | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
```
###　間違えたフィールド名を変更する
消すまではいかないものの、フィールド名を変更したい時がきっとあるはずです。
updatedフィールドを作った（つもりだった）ものの、消されず、項目名を間違えて「udated」にしてしまった世界線での対応です。
``
```
mysql> alter table hukusyuuyou add udated date after family;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show fields from hukusyuuyou;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| uid    | varchar(7)  | YES  |     | NULL    |       |
| passwd | varchar(15) | YES  |     | NULL    |       |
| uname  | varchar(20) | YES  |     | NULL    |       |
| family | int         | YES  |     | NULL    |       |
| udated | date        | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
```
↑よく見ないと、気付きませんがこのままでは上司に怒られてしまいそうです。
なので、addをchangeに変えて
{change (修正前名) (修正後名) (データ型指定)}
``alter table hukusyuuyou change udated updated date;``
[hukusyuuyouテーブルのフィールド名udatedをupdatedに変えて(データ形式は月日でね)]
```
mysql> alter table hukusyuuyou change udated updated date;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show fields from hukusyuuyou;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| uid     | varchar(7)  | YES  |     | NULL    |       |
| passwd  | varchar(15) | YES  |     | NULL    |       |
| uname   | varchar(20) | YES  |     | NULL    |       |
| family  | int         | YES  |     | NULL    |       |
| updated | date        | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
```
↑確認ヨシ！
### フィールドのデータ型を変更する
「やっぱりアプデした時間まで欲しいな～」
そんな後出し要求にも応えられるようにしておきましょう！
``alter table hukusyuuyou modify updated datetime;``
[hukusyuuyouテーブルのupdatedフィールドのデータ型を日時にして]
これで日時まで情報がないと、レコード登録できないようにできました。
```
mysql> alter table usr modify updated datetime;
Query OK, 0 rows affected (0.17 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show fields from hukusyuuyou;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| uid     | varchar(7)  | YES  |     | NULL    |       |
| passwd  | varchar(15) | YES  |     | NULL    |       |
| uname   | varchar(20) | YES  |     | NULL    |       |
| family  | int         | YES  |     | NULL    |       |
| updated | datetime    | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
```
↑確認もしっかりやる習慣を付けておきましょう。

体調崩したばかりだし、今日はこの辺で。
次回はいよいよレコードの登録をするよ。
おやすみなさーい＾＾

```
mysql> exit;
Bye
```