MySQL初心者奮闘記２～テーブルを操作しよう～

# [前回](https://qiita.com/tuk19/items/5833680e5ec694096def)
**1. MySQLをインストール**
**2. MySQLを実行**
**3. テーブルを作る。**

# 今回やること
**1. test_usesテーブルにカラムを追加する。**
**2. update文でデータを上書きする。**
**3. NULL許容を変更する。**
**4. insert文でデータを追加する。**
**5. ALTER TABLE文でカラム情報を変更する。**
**6. case文でまとめてupdateする。**
**7. PRIMARY KEYを変更する。**

## テーブルカラムを追加
```python:テーブルを確認する
select * from test_users;
+----+----------+
| id | name     |
+----+----------+
|  1 | テスト１ |
+----+----------+
```

``ALTER Table テーブル add カラム 型``でカラムを追加する

```python:テーブルにカラムを追加する
# とりあえずgenderを追加してみる
 ALTER Table test_users add gender char(1);
Query OK, 0 rows affected (0.16 sec)
Records: 0  Duplicates: 0  Warnings: 0

# 確認してみる
mysql> select * from test_users ;
+----+----------+--------+
| id | name     | gender |
+----+----------+--------+
|  1 | テスト１ | NULL   |
+----+----------+--------+

# 同様にageとintroを追加する。
mysql> select * from test_users ;
+----+----------+--------+------+-------+
| id | name     | gender | age  | intro |
+----+----------+--------+------+-------+
|  1 | テスト１ | NULL   | NULL | NULL  |
+----+----------+--------+------+-------+
```

## NULLデータを上書きする
```python:updateでデータ上書き
# update文
mysql> update test_users set gender="男", age=28, intro="よろしくね" where id=1;
Query OK, 1 row affected (0.09 sec)
Rows matched: 1  Changed: 1  Warnings: 0

# 確認してみる
mysql> select * from test_users ;
+----+----------+--------+------+------------+
| id | name     | gender | age  | intro      |
+----+----------+--------+------+------------+
|  1 | テスト１ | 男     |   28 | よろしくね |
+----+----------+--------+------+------------+
1 row in set (0.03 sec)
```

## nameカラムはNULLを許容しないようにする。
``show columns``でカラム情報を確認。

```python:カラムのタイプを確認
mysql> show columns from test_users;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int          | NO   | PRI | NULL    | auto_increment |
| name   | text         | YES  |     | NULL    |                |
| gender | char(1)      | YES  |     | NULL    |                |
| age    | tinyint      | YES  |     | NULL    |                |
| intro  | varchar(255) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
5 rows in set (0.07 sec)
```

``alter table テーブル modify column カラム名``で、データ型とNULL許容を変更する

```python:nameカラムを変更する
# データ型をvarcharにし、NULLを許容しない
mysql> alter table test_users modify column name varchar(100) not null;
Query OK, 1 row affected (0.27 sec)
Records: 1  Duplicates: 0  Warnings: 0

# カラム情報を確認
mysql> show columns from test_users;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int          | NO   | PRI | NULL    | auto_increment |
| name   | varchar(100) | NO   |     | NULL    |                |
| gender | char(1)      | YES  |     | NULL    |                |
| age    | tinyint      | YES  |     | NULL    |                |
| intro  | varchar(255) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

# データを確認
mysql> select * from test_users ;
+----+----------+--------+------+------------+
| id | name     | gender | age  | intro      |
+----+----------+--------+------+------------+
|  1 | テスト１ | 男     |   28 | よろしくね |
+----+----------+--------+------+------------+
1 row in set (0.00 sec)
```

## insert文でデータを追加
```python:Insertでデータを追加する
mysql> insert into test_users (name, gender, age) values('テスト花子', '女', 20);
Query OK, 1 row affected (0.04 sec)

mysql> select * from test_users;
+----+------------+--------+------+------------+
| id | name       | gender | age  | intro      |
+----+------------+--------+------+------------+
|  1 | テスト１   | 男     |   28 | よろしくね |
|  2 | テスト花子 | 女     |   20 | NULL       |
+----+------------+--------+------+------------+
2 rows in set (0.00 sec)
```
``insert into ～() values(), ()・・・``でデータをまとめてinsertする

```python:複数のデータをまとめて追加する
# 見やすいように改行してます
insert into test_users (name, gender, age, intro) 
values ('テスト太郎', '男', 23, '趣味はキャンプ'), 
       ('テスト洋子', '女', 45, '私は洋子'), 
       ('テスト右衛門', '男', 68, 'ポケモンゲットだぜ!'), 
       ('テストめい', '女', 24, 'おねぇちゃんのばかぁ!'), 
       ('テスト愛', '女', 17, '貢いでくれる人が好きです'), 
       ('テスト三郎', '男', 43, 'お金ならありません'), 
       ('テスト志 郎', '男', 38, 'デュクシ、デュクシ'),
       ('テスト和恵', '女', 48, NULL);
Query OK, 8 rows affected (0.05 sec)
Records: 8  Duplicates: 0  Warnings: 0

# 追加したデータを確認
mysql> select * from test_users;
+----+--------------+--------+------+--------------------------+
| id | name         | gender | age  | intro                    |
+----+--------------+--------+------+--------------------------+                 ;
|  1 | テスト１     | 男     |   28 | よろしくね               |
|  2 | テスト花子   | 女     |   20 | NULL                     |
| 25 | テスト太郎   | 男     |   23 | 趣味はキャンプ           |
| 26 | テスト洋子   | 女     |   45 | 私は洋子                 |
| 27 | テスト右衛門 | 男     |   68 | ポケモンゲットだぜ!      |
| 28 | テストめい   | 女     |   24 | おねぇちゃんのばかぁ!    |
| 29 | テスト愛     | 女     |   17 | 貢いでくれる人が好きです |
| 30 | テスト三郎   | 男     |   43 | お金ならありません       |
| 31 | テスト志郎   | 男     |   38 | デュクシ、デュクシ       |
| 32 | テスト和恵   | 女     |   48 | NULL                     |
+----+--------------+--------+------+--------------------------+
10 rows in set (0.00 sec)

# 条件付きでデータを取得してみる
mysql> select name from test_users where gender='女';
+------------+
| name       |
+------------+
| テスト花子 |
| テスト洋子 |
| テストめい |
| テスト愛   |
| テスト和恵 |
+------------+
5 rows in set (0.00 sec)
```

## alter tableでカラム情報を変更
``alter table ~ add``でカラムを追加
``alter table ~ modify ~ text after``でカラムを移動
``alter table ~ change column``でカラム情報を変更

```python:Noカラムを追加し2列目に移動
# カラム情報を確認
mysql> show columns from test_users;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int          | NO   | PRI | NULL    | auto_increment |
| name   | varchar(100) | NO   |     | NULL    |                |
| gender | char(1)      | YES  |     | NULL    |                |
| age    | tinyint      | YES  |     | NULL    |                |
| intro  | varchar(255) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
5 rows in set (0.04 sec)

# Noカラムを追加
mysql> alter table test_users add NO int not null;
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

# データを確認
mysql> select * from test_users;
+----+--------------+--------+------+--------------------------+----+
| id | name         | gender | age  | intro                    | NO |
+----+--------------+--------+------+--------------------------+----+
|  1 | テスト１     | 男     |   28 | よろしくね               |  0 |
|  2 | テスト花子   | 女     |   20 | NULL                     |  0 |
| 25 | テスト太郎   | 男     |   23 | 趣味はキャンプ           |  0 |
| 26 | テスト洋子   | 女     |   45 | 私は洋子                 |  0 |
| 27 | テスト右衛門 | 男     |   68 | ポケモンゲットだぜ!      |  0 |
| 28 | テストめい   | 女     |   24 | おねぇちゃんのばかぁ!    |  0 |
| 29 | テスト愛     | 女     |   17 | 貢いでくれる人が好きです |  0 |
| 30 | テスト三郎   | 男     |   43 | お金ならありません       |  0 |
| 31 | テスト志郎   | 男     |   38 | デュクシ、デュクシ       |  0 |
| 32 | テスト和恵   | 女     |   48 | NULL                     |  0 |
+----+--------------+--------+------+--------------------------+----+
10 rows in set (0.03 sec)

# Noカラムをidカラムの次に移動
mysql> alter table test_users modify NO text after id;
Query OK, 10 rows affected (0.40 sec)
Records: 10  Duplicates: 0  Warnings: 0

# 確認する
mysql> select * from test_users;
+----+------+--------------+--------+------+--------------------------+
| id | NO   | name         | gender | age  | intro                    |
+----+------+--------------+--------+------+--------------------------+
|  1 | 0    | テスト１     | 男     |   28 | よろしくね               |
|  2 | 0    | テスト花子   | 女     |   20 | NULL                     |
| 25 | 0    | テスト太郎   | 男     |   23 | 趣味はキャンプ           |
| 26 | 0    | テスト洋子   | 女     |   45 | 私は洋子                 |
| 27 | 0    | テスト右衛門 | 男     |   68 | ポケモンゲットだぜ!      |
| 28 | 0    | テストめい   | 女     |   24 | おねぇちゃんのばかぁ!    |
| 29 | 0    | テスト愛     | 女     |   17 | 貢いでくれる人が好きです |
| 30 | 0    | テスト三郎   | 男     |   43 | お金ならありません       |
| 31 | 0    | テスト志郎   | 男     |   38 | デュクシ、デュクシ       |
| 32 | 0    | テスト和恵   | 女     |   48 | NULL                     |
+----+------+--------------+--------+------+--------------------------+
10 rows in set (0.00 sec)

# Noの予定が間違えてNOとしたので変更
mysql> alter table test_users change column NO No int;
Query OK, 10 rows affected (0.33 sec)
Records: 10  Duplicates: 0  Warnings: 0

# 確認する
mysql> select * from test_users;
+----+------+--------------+--------+------+--------------------------+
| id | No   | name         | gender | age  | intro                    |
+----+------+--------------+--------+------+--------------------------+
|  1 |    0 | テスト１     | 男     |   28 | よろしくね               |
|  2 |    0 | テスト花子   | 女     |   20 | NULL                     |
| 25 |    0 | テスト太郎   | 男     |   23 | 趣味はキャンプ           |
| 26 |    0 | テスト洋子   | 女     |   45 | 私は洋子                 |
| 27 |    0 | テスト右衛門 | 男     |   68 | ポケモンゲットだぜ!      |
| 28 |    0 | テストめい   | 女     |   24 | おねぇちゃんのばかぁ!    |
| 29 |    0 | テスト愛     | 女     |   17 | 貢いでくれる人が好きです |
| 30 |    0 | テスト三郎   | 男     |   43 | お金ならありません       |
| 31 |    0 | テスト志郎   | 男     |   38 | デュクシ、デュクシ       |
| 32 |    0 | テスト和恵   | 女     |   48 | NULL                     |
+----+------+--------------+--------+------+--------------------------+
10 rows in set (0.00 sec)


# 他のカラムも同様に先頭を大文字にする
mysql> alter table test_users change column name Name varchar(100);
Query OK, 0 rows affected (0.35 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table test_users change column gender Gender char(1);
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table test_users change column age Age tinyint;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table test_users change column intro Intro varchar(255);
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select * from test_users;
+----+------+--------------+--------+------+--------------------------+
| id | No   | Name         | Gender | Age  | Intro                    |
+----+------+--------------+--------+------+--------------------------+
|  1 |    0 | テスト１     | 男     |   28 | よろしくね               |
|  2 |    0 | テスト花子   | 女     |   20 | NULL                     |
| 25 |    0 | テスト太郎   | 男     |   23 | 趣味はキャンプ           |
| 26 |    0 | テスト洋子   | 女     |   45 | 私は洋子                 |
| 27 |    0 | テスト右衛門 | 男     |   68 | ポケモンゲットだぜ!      |
| 28 |    0 | テストめい   | 女     |   24 | おねぇちゃんのばかぁ!    |
| 29 |    0 | テスト愛     | 女     |   17 | 貢いでくれる人が好きです |
| 30 |    0 | テスト三郎   | 男     |   43 | お金ならありません       |
| 31 |    0 | テスト志郎   | 男     |   38 | デュクシ、デュクシ       |
| 32 |    0 | テスト和恵   | 女     |   48 | NULL                     |
+----+------+--------------+--------+------+--------------------------+
10 rows in set (0.00 sec)
```

## case文で場合分けしてまとめてupdate

```python:updateでデータを変更
mysql> update test_users set No = 1 where id = 1;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

# テーブル確認
mysql> select * from test_users;
+----+------+--------------+--------+------+--------------------------+
| id | No   | Name         | Gender | Age  | Intro                    |
+----+------+--------------+--------+------+--------------------------+
|  1 |    1 | テスト１     | 男     |   28 | よろしくね               |
|  2 |    0 | テスト花子   | 女     |   20 | NULL                     |
| 25 |    0 | テスト太郎   | 男     |   23 | 趣味はキャンプ           |
| 26 |    0 | テスト洋子   | 女     |   45 | 私は洋子                 |
| 27 |    0 | テスト右衛門 | 男     |   68 | ポケモンゲットだぜ!      |
| 28 |    0 | テストめい   | 女     |   24 | おねぇちゃんのばかぁ!    |
| 29 |    0 | テスト愛     | 女     |   17 | 貢いでくれる人が好きです |
| 30 |    0 | テスト三郎   | 男     |   43 | お金ならありません       |
| 31 |    0 | テスト志郎   | 男     |   38 | デュクシ、デュクシ       |
| 32 |    0 | テスト和恵   | 女     |   48 | NULL                     |
+----+------+--------------+--------+------+--------------------------+
10 rows in set (0.03 sec)

# まとめてupdateする
mysql> update test_users set No = case id
    -> when 2 then 2
    -> when 25 then 3
    -> when 26 then 4
    -> when 27 then 5
    -> when 28 then 6
    -> when 29 then 7
    -> when 30 then 8
    -> when 31 then 9
    -> when 32 then 10
    -> end;
Query OK, 10 rows affected (0.05 sec)
Rows matched: 10  Changed: 10  Warnings: 0

# あっ、caseに1の時を入れるの忘れた。
mysql> select * from test_users;
+----+------+--------------+--------+------+--------------------------+
| id | No   | Name         | Gender | Age  | Intro                    |
+----+------+--------------+--------+------+--------------------------+
|  1 | NULL | テスト１     | 男     |   28 | よろしくね               |
|  2 |    2 | テスト花子   | 女     |   20 | NULL                     |
| 25 |    3 | テスト太郎   | 男     |   23 | 趣味はキャンプ           |
| 26 |    4 | テスト洋子   | 女     |   45 | 私は洋子                 |
| 27 |    5 | テスト右衛門 | 男     |   68 | ポケモンゲットだぜ!      |
| 28 |    6 | テストめい   | 女     |   24 | おねぇちゃんのばかぁ!    |
| 29 |    7 | テスト愛     | 女     |   17 | 貢いでくれる人が好きです |
| 30 |    8 | テスト三郎   | 男     |   43 | お金ならありません       |
| 31 |    9 | テスト志郎   | 男     |   38 | デュクシ、デュクシ       |
| 32 |   10 | テスト和恵   | 女     |   48 | NULL                     |
+----+------+--------------+--------+------+--------------------------+
10 rows in set (0.00 sec)

# もう一度update
mysql> update test_users set No = 1 where id = 1;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

# 確認する
mysql> select * from test_users;
+----+------+--------------+--------+------+--------------------------+
| id | No   | Name         | Gender | Age  | Intro                    |
+----+------+--------------+--------+------+--------------------------+
|  1 |    1 | テスト１     | 男     |   28 | よろしくね               |
|  2 |    2 | テスト花子   | 女     |   20 | NULL                     |
| 25 |    3 | テスト太郎   | 男     |   23 | 趣味はキャンプ           |
| 26 |    4 | テスト洋子   | 女     |   45 | 私は洋子                 |
| 27 |    5 | テスト右衛門 | 男     |   68 | ポケモンゲットだぜ!      |
| 28 |    6 | テストめい   | 女     |   24 | おねぇちゃんのばかぁ!    |
| 29 |    7 | テスト愛     | 女     |   17 | 貢いでくれる人が好きです |
| 30 |    8 | テスト三郎   | 男     |   43 | お金ならありません       |
| 31 |    9 | テスト志郎   | 男     |   38 | デュクシ、デュクシ       |
| 32 |   10 | テスト和恵   | 女     |   48 | NULL                     |
+----+------+--------------+--------+------+--------------------------+
10 rows in set (0.03 sec)
```

## NULLの許可を設定
```python:NoカラムのNULLを許可しない
# テーブル情報を確認
mysql> show columns from test_users;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int          | NO   | PRI | NULL    | auto_increment |
| No     | int          | YES  |     | NULL    |                |
| Name   | varchar(100) | YES  |     | NULL    |                |
| Gender | char(1)      | YES  |     | NULL    |                |
| Age    | tinyint      | YES  |     | NULL    |                |
| Intro  | varchar(255) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
6 rows in set (0.03 sec)

# alter tableで変更
mysql> alter table test_users modify column No int not null;
Query OK, 0 rows affected (0.46 sec)
Records: 0  Duplicates: 0  Warnings: 0

# 確認する
mysql> show columns from test_users;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int          | NO   | PRI | NULL    | auto_increment |
| No     | int          | NO   |     | NULL    |                |
| Name   | varchar(100) | YES  |     | NULL    |                |
| Gender | char(1)      | YES  |     | NULL    |                |
| Age    | tinyint      | YES  |     | NULL    |                |
| Intro  | varchar(255) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
6 rows in set (0.04 sec)

# NameのNULLも許可しない
mysql> alter table test_users modify column Name varchar(100) not null;
Query OK, 0 rows affected (0.28 sec)
Records: 0  Duplicates: 0  Warnings: 0

# テーブル確認
mysql> select * from test_users;
+----+----+--------------+--------+------+--------------------------+
| id | No | Name         | Gender | Age  | Intro                    |
+----+----+--------------+--------+------+--------------------------+
|  1 |  1 | テスト１     | 男     |   28 | よろしくね               |
|  2 |  2 | テスト花子   | 女     |   20 | NULL                     |
| 25 |  3 | テスト太郎   | 男     |   23 | 趣味はキャンプ           |
| 26 |  4 | テスト洋子   | 女     |   45 | 私は洋子                 |
| 27 |  5 | テスト右衛門 | 男     |   68 | ポケモンゲットだぜ!      |
| 28 |  6 | テストめい   | 女     |   24 | おねぇちゃんのばかぁ!    |
| 29 |  7 | テスト愛     | 女     |   17 | 貢いでくれる人が好きです |
| 30 |  8 | テスト三郎   | 男     |   43 | お金ならありません       |
| 31 |  9 | テスト志郎   | 男     |   38 | デュクシ、デュクシ       |
| 32 | 10 | テスト和恵   | 女     |   48 | NULL                     |
+----+----+--------------+--------+------+--------------------------+
10 rows in set (0.00 sec)
```

## カラムのPRIMARY KEYを変更する
```python:PRIMARY_KEY変更
# テーブル情報を確認
mysql> show columns from test_users;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int          | NO   | PRI | NULL    | auto_increment |
| No     | int          | NO   |     | NULL    |                |
| Name   | varchar(100) | NO   |     | NULL    |                |
| Gender | char(1)      | YES  |     | NULL    |                |
| Age    | tinyint      | YES  |     | NULL    |                |
| Intro  | varchar(255) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

# いろいろやったら怒られた
mysql> alter table test_users add primary key (No);
ERROR 1068 (42000): Multiple primary key defined
mysql> alter table test_users drop primary key;
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
mysql> alter table test_users drop primary key;
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

# どうやらidのPRIMARY KEYを先に外す必要があるみたい
# そのまえにauto_incrementを外さないといけない
# auto_incrementを指定せずにalter table changeして外す
mysql> ALTER TABLE test_users CHANGE COLUMN `id` `id` int(10) unsigned NOT NULL ;
Query OK, 10 rows affected, 1 warning (0.36 sec)
Records: 10  Duplicates: 0  Warnings: 1

# idのPRIMARY KEYを外す
mysql> ALTER TABLE test_users DROP PRIMARY KEY ;
Query OK, 10 rows affected (0.58 sec)
Records: 10  Duplicates: 0  Warnings: 0

# NoにPRIMARY KEYを追加する
mysql> ALTER TABLE test_users ADD PRIMARY KEY (No) ;
Query OK, 0 rows affected (0.32 sec)
Records: 0  Duplicates: 0  Warnings: 0

# NoにAUTO_INCREMENTを設定する。
mysql> ALTER TABLE test_users CHANGE COLUMN `No` `No` int unsigned NOT NULL AUTO_INCREMENT;
Query OK, 10 rows affected (0.20 sec)
Records: 10  Duplicates: 0  Warnings: 0

# テーブル情報を確認
mysql> show columns from test_users;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int unsigned | NO   |     | NULL    |                |
| No     | int unsigned | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(100) | NO   |     | NULL    |                |
| Gender | char(1)      | YES  |     | NULL    |                |
| Age    | tinyint      | YES  |     | NULL    |                |
| Intro  | varchar(255) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)


# やっぱりPRYMARY KEYはidに設定する。
# 手順は同様
mysql> ALTER TABLE test_users CHANGE COLUMN `id` `id` int unsigned NOT NULL ;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE test_users CHANGE COLUMN `No` `No` int unsigned NOT NULL ;
Query OK, 10 rows affected (0.24 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE test_users DROP PRIMARY KEY ;
Query OK, 10 rows affected (0.18 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE test_users ADD PRIMARY KEY (id) ;
Query OK, 0 rows affected (0.27 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE test_users CHANGE COLUMN `id` `id` int unsigned NOT NULL AUTO_INCREMENT;
Query OK, 10 rows affected (0.34 sec)
Records: 10  Duplicates: 0  Warnings: 0

# テーブル情報を確認する
mysql> show columns from test_users;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int unsigned | NO   | PRI | NULL    | auto_increment |
| No     | int unsigned | NO   |     | NULL    |                |
| Name   | varchar(100) | NO   |     | NULL    |                |
| Gender | char(1)      | YES  |     | NULL    |                |
| Age    | tinyint      | YES  |     | NULL    |                |
| Intro  | varchar(255) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
```

## NULLを許可する
```python:やっぱりNoにNULLを許可する
# Not NULLを指定せずにカラムを変更
mysql> ALTER TABLE test_users CHANGE COLUMN `No` `No` int;
Query OK, 10 rows affected (0.35 sec)
Records: 10  Duplicates: 0  Warnings: 0

# テーブル情報を確認
mysql> show columns from test_users;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int unsigned | NO   | PRI | NULL    | auto_increment |
| No     | int          | YES  |     | NULL    |                |
| Name   | varchar(100) | NO   |     | NULL    |                |
| Gender | char(1)      | YES  |     | NULL    |                |
| Age    | tinyint      | YES  |     | NULL    |                |
| Intro  | varchar(255) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
6 rows in set (0.03 sec)

# テーブルを確認
mysql> select * from test_users;
+----+------+--------------+--------+------+--------------------------+
| id | No   | Name         | Gender | Age  | Intro                    |
+----+------+--------------+--------+------+--------------------------+
|  1 |    1 | テスト１     | 男     |   28 | よろしくね               |
|  2 |    2 | テスト花子   | 女     |   20 | NULL                     |
| 25 |    3 | テスト太郎   | 男     |   23 | 趣味はキャンプ           |
| 26 |    4 | テスト洋子   | 女     |   45 | 私は洋子                 |
| 27 |    5 | テスト右衛門 | 男     |   68 | ポケモンゲットだぜ!      |
| 28 |    6 | テストめい   | 女     |   24 | おねぇちゃんのばかぁ!    |
| 29 |    7 | テスト愛     | 女     |   17 | 貢いでくれる人が好きです |
| 30 |    8 | テスト三郎   | 男     |   43 | お金ならありません       |
| 31 |    9 | テスト志郎   | 男     |   38 | デュクシ、デュクシ       |
| 32 |   10 | テスト和恵   | 女     |   48 | NULL                     |
+----+------+--------------+--------+------+--------------------------+
10 rows in set (0.00 sec)

# NoにNULLが格納されるか確認
mysql> insert into test_users (Name, gender) values('テスト陽太', '男');
Query OK, 1 row affected (0.05 sec)

# テーブルを確認
mysql> select * from test_users;
+----+------+--------------+--------+------+--------------------------+
| id | No   | Name         | Gender | Age  | Intro                    |
+----+------+--------------+--------+------+--------------------------+
|  1 |    1 | テスト１     | 男     |   28 | よろしくね               |
|  2 |    2 | テスト花子   | 女     |   20 | NULL                     |
| 25 |    3 | テスト太郎   | 男     |   23 | 趣味はキャンプ           |
| 26 |    4 | テスト洋子   | 女     |   45 | 私は洋子                 |
| 27 |    5 | テスト右衛門 | 男     |   68 | ポケモンゲットだぜ!      |
| 28 |    6 | テストめい   | 女     |   24 | おねぇちゃんのばかぁ!    |
| 29 |    7 | テスト愛     | 女     |   17 | 貢いでくれる人が好きです |
| 30 |    8 | テスト三郎   | 男     |   43 | お金ならありません       |
| 31 |    9 | テスト志郎   | 男     |   38 | デュクシ、デュクシ       |
| 32 |   10 | テスト和恵   | 女     |   48 | NULL                     |
| 33 | NULL | テスト陽太   | 男     | NULL | NULL                     |
+----+------+--------------+--------+------+--------------------------+
11 rows in set (0.03 sec)
```

## データ型
|char|varchar|tinyint|int|int unsigned|
|:-:|:-:|:-:|:-:|:-:|
|文字列|文字列|数値|数値|数値（符号なし）|


# 参考資料
[MySQLでカラムを追加する「ALTER TABLE ~ ADD」](https://uxmilk.jp/12612)
[カラムに関する情報を取得する](https://www.dbonline.jp/mysql/table/index3.htmlhttps://www.dbonline.jp/mysql/table/index3.html)
[【MySQL】カラムにNULLを格納できないようにする（not null の使い方）](https://26gram.com/mysql-not-null)
[MySQL道普請便り 第41回　MySQLのCHAR型とVARCHAR型との違いを理解する](https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0041)
[MySQLで型の変更をする](https://qiita.com/t-fuku/items/e2a05ebc2ad1db259615)
[MySQL：INSERTで複数行追加する](http://raining.bear-life.com/mysql-2/insert%E3%81%A7%E8%A4%87%E6%95%B0%E8%A1%8C%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B)
[1回のINSERT（インサートSQL）で複数行のレコードを一括挿入（追加）する](https://johobase.com/multiple-insert-sql/)
[MySQLでカラムの順番を変更する](https://qiita.com/sayama0402/items/2fedb2f4ce8ab5da1438)
[MySQLでカラム名を変更する方法をご紹介！](https://qumeru.com/magazine/420)
[SQLで同じカラムを複数同時にUPDATE](https://teratail.com/questions/87184)
[[MySQL] AUTO_INCREMENTカラム変更がめんどくさい・・](https://qiita.com/hit/items/7947af990bc4721471af)
[AUTO_INCREMENTを設定する(連続した数値を自動でカラムに格納する)](https://www.dbonline.jp/mysql/table/index7.html)
[整数型(TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT)](https://www.dbonline.jp/mysql/type/index1.html)