3-6.MySQLでテーブルに列の位置を指定して追加する方法
テーブルを作成したあとで列を追加する方法をご紹介します。
テーブルを消して再定義などする必要はありません。
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>


