3-6.MySQLでテーブルに列の位置を指定して追加する方法

2019年7月15日

テーブルを作成したあとで列を追加する方法をご紹介します。

テーブルを消して再定義などする必要はありません。

目次

1.列の追加方法(最後尾、先頭「FIRST」、指定列の後ろ「AFTER」)

既にテーブルを定義したあとで列を追加したい場合は
追加したい列の位置に応じて以下の構文で行うことが出来ます。

・列を最後尾に追加する場合
ALTER TABLE [テーブル名] ADD [列名] [属性];

・列を先頭に追加する
ALTER TABLE [テーブル名] ADD [列名][属性] FIRST;

・列を指定した「列名A」の後ろに追加する
ALTER TABLE [テーブル名] ADD [列名][属性] AFTER 列名A;

スポンサードサーチ

2.実行例

列を追加したいテーブル「TABLE02」があるとします。

mysql> desc table02;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| column01 | char(10) | YES  |     | NULL    |       |
| column02 | char(10) | YES  |     | NULL    |       |
| column03 | char(10) | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql>

 

1)列「NEWCOLUMN CHAR(10)」を最後尾に追加します。

ALTER TABLE TABLE02 add NEWCOLUMN CHAR(10);

mysql> desc table02;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| column01 | char(10) | YES  |     | NULL    |       |
| column02 | char(10) | YES  |     | NULL    |       |
| column03 | char(10) | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> ALTER TABLE TABLE02 add NEWCOLUMN CHAR(10);
Query OK, 0 rows affected (0.67 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc table02;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| column01  | char(10) | YES  |     | NULL    |       |
| column02  | char(10) | YES  |     | NULL    |       |
| column03  | char(10) | YES  |     | NULL    |       |
| NEWCOLUMN | char(10) | YES  |     | NULL    |       |←追加された行
+-----------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql>

2)列「NEWCOLUMN CHAR(10)」を先頭に追加します。

ALTER TABLE TABLE02 add NEWCOLUMN CHAR(10) FIRST;

ALTER TABLE TABLE02 add NEWCOLUMN CHAR(10) FIRST;

mysql> desc table02;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| column01 | char(10) | YES  |     | NULL    |       |
| column02 | char(10) | YES  |     | NULL    |       |
| column03 | char(10) | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> ALTER TABLE TABLE02 add NEWCOLUMN CHAR(10) FIRST;
Query OK, 0 rows affected (2.83 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc table02;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| NEWCOLUMN | char(10) | YES  |     | NULL    |       |←追加された行
| column01  | char(10) | YES  |     | NULL    |       |
| column02  | char(10) | YES  |     | NULL    |       |
| column03  | char(10) | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql>

3)列「NEWCOLUMN CHAR(10)」を列「column02 」の後に追加します。

ALTER TABLE TABLE02 add NEWCOLUMN CHAR(10) AFTER column02;

mysql> desc table02;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| column01 | char(10) | YES  |     | NULL    |       |
| column02 | char(10) | YES  |     | NULL    |       |
| column03 | char(10) | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE TABLE02 add NEWCOLUMN CHAR(10) AFTER column02;
Query OK, 0 rows affected (4.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc table02;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| column01  | char(10) | YES  |     | NULL    |       |
| column02  | char(10) | YES  |     | NULL    |       |
| NEWCOLUMN | char(10) | YES  |     | NULL    |       | ←追加された行
| column03  | char(10) | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
4 rows in set (0.35 sec)

mysql>

この方法で自由に好きな位置に列を追加できます。

既存のデータには影響なしです。

追加された列にはDefault指定が無ければNullが設定されます。

mysql> insert into table02 value('aaa','bbb','ccc');
Query OK, 1 row affected (0.44 sec)

mysql> select * from table02;
+----------+----------+----------+
| column01 | column02 | column03 |
+----------+----------+----------+
| aaa      | bbb      | ccc      |
+----------+----------+----------+
1 row in set (0.00 sec)
   <<NEWCOLUMNをcolumn02の後ろに追加>>
mysql> ALTER TABLE TABLE02 add NEWCOLUMN CHAR(10) AFTER column02;
Query OK, 0 rows affected (3.12 sec)
Records: 0  Duplicates: 0  Warnings: 0
     <<NEWCOLUMN2を最後尾にDefault'ZZZ'で追加>>
mysql> ALTER TABLE TABLE02 add NEWCOLUMN2 CHAR(10) DEFAULT 'ZZZ';
Query OK, 0 rows affected (0.77 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select * from table02;
+----------+----------+-----------+----------+------------+
| column01 | column02 | NEWCOLUMN | column03 | NEWCOLUMN2 |
+----------+----------+-----------+----------+------------+
| aaa      | bbb      | NULL      | ccc      | ZZZ        |
+----------+----------+-----------+----------+------------+
              ↑             ↑
    NEWCOLUMNがNULLで追加されている  NEWCOLUMN2がDEFAULT値のZZZで追加されている 
1 row in set (0.00 sec)

mysql>