3-6.MySQLでテーブルに列の位置を指定して追加する方法
テーブルを作成したあとで列を追加する方法をご紹介します。
テーブルを消して再定義などする必要はありません。
目次
1.列の追加方法(最後尾、先頭「FIRST」、指定列の後ろ「AFTER」)
既にテーブルを定義したあとで列を追加したい場合は
追加したい列の位置に応じて以下の構文で行うことが出来ます。
・列を最後尾に追加する場合
ALTER TABLE [テーブル名] ADD [列名] [属性];
・列を先頭に追加する
ALTER TABLE [テーブル名] ADD [列名][属性] FIRST;
・列を指定した「列名A」の後ろに追加する
ALTER TABLE [テーブル名] ADD [列名][属性] AFTER 列名A;
スポンサードサーチ
2.実行例
列を追加したいテーブル「TABLE02」があるとします。
1 2 3 4 5 6 7 8 9 10 11 12 |
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);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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 | |<strong>←追加された行</strong> +-----------+----------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql> |
2)列「NEWCOLUMN CHAR(10)」を先頭に追加します。
ALTER TABLE TABLE02 add NEWCOLUMN CHAR(10) FIRST;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
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 | |<strong>←追加された行</strong> | 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;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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 | | <strong>←追加された行</strong> | column03 | char(10) | YES | | NULL | | +-----------+----------+------+-----+---------+-------+ 4 rows in set (0.35 sec) mysql> |
この方法で自由に好きな位置に列を追加できます。
既存のデータには影響なしです。
追加された列にはDefault指定が無ければNullが設定されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
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) <strong><<NEWCOLUMNをcolumn02の後ろに追加>></strong> mysql> ALTER TABLE TABLE02 add NEWCOLUMN CHAR(10) AFTER column02; Query OK, 0 rows affected (3.12 sec) Records: 0 Duplicates: 0 Warnings: 0 <strong><<NEWCOLUMN2を最後尾にDefault'ZZZ'で追加>></strong> 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 | +----------+----------+-----------+----------+------------+ ↑ ↑ <strong>NEWCOLUMNがNULLで追加されている NEWCOLUMN2がDEFAULT値のZZZで追加されている</strong> 1 row in set (0.00 sec) mysql> |

ディスカッション
コメント一覧
まだ、コメントがありません