テーブルのカラム構造を変更する
2014年6月4日:MySQL
前回、テーブルを作成する方法を紹介しました。
テーブルを作成する際、あらかじめカラム(列)の内容を決めて、データを入れていきました。
しかし、データベースを扱っている際に、カラムの追加や削除などの変更をしたい場合があります。
そこで、ここではカラムの
- 定義の変更
- 名前と定義の変更
- 追加と削除
- 位置の変更
を解説します。
はじめに以下の様なテーブルがあったとします。
id(VARCHAR(10)) | name(VARCHAR(10)) | age(INT) |
---|---|---|
taro | 山田太郎 | 21 |
hanake | 佐藤花子 | 12 |
kondo | 近藤武蔵 | 24 |
前回の記事と同じ内容のテーブルです。
作り方などに関しては前回の記事を参考にしてください。
テーブルの名前はmy_tbです。
カラムのデータ型を変更する
では、カラムのデータ型を変更する方法を紹介します。
いまidのデータ型はVARCHAR(10)ですが、もう少し容量を増やしたいということでVARCHAR(20)に変更したいとします。
このようにデータ型を変更するには
という命令を使います。今回はテーブルmy_tbのカラムidのデータ型VARCHAR(10)をVARCHAR(20)へ変更したいので
mysql> ALTER TABLE my_tb MODIFY id VARCHAR(20);
となります。すると
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0
と表示されます。実際に
mysql> DESC my_tb;
としてテーブルを見てみると確かに
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | varchar(20) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
と変更されていることが確認できます。
カラムの名前とデータ型を変更する
次に、データ型だけでなく名前も変更したいとします。
例えば、idをid1、カラムVARCHAR(20)をVARCHAR(30)へ変更したいとします。
このとき
という命令を使います。さっそく使ってみると
mysql> ALTER TABLE my_tb CHANGE id id1 VARCHAR(30);
となり
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
とひょうじされます。そして、テーブルmy_tbを表示すると
mysql> DESC my_tb;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id1 | varchar(30) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
となります。確かにid1でvarchar(30)に変更されているのがわかるかと思います。
カラムの追加と削除
カラムの追加と削除の方法を紹介します。追加と削除はそれぞれ
ALTER TABLE テーブル名 ADD カラム名 データ型;
ALTER TABLE テーブル名 DROP カラム名;
を使います。では、id1を消して再び追加してみます。
mysql> ALTER TABLE my_tb DROP id1;
とすれば
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0
と表示されid1が消去されます。実際に確認すると
mysql> DESC my_tb;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
となっています。
次に、VARCHAR(10)型のカラムidを追加します。
mysql> ALTER TABLE my_tb ADD id VARCHAR(10);
とすれば
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
となり、テーブルを表示すると
mysql> DESC my_tb;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| id | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
となり追加されているのがわかります。
カラムの位置を変更する
idが一番下に来ているので、一番上に変更したいですね。
そこで使用する命令が
【先頭に移動】
ALTER TABLE テーブル名 MODIFY 移動するカラム名 データ型 FIRST;
【指定場所に移動】
ALTER TABLE テーブル名 MODIFY 移動するカラム名 データ型 AFTER 移動したい場所の前のカラム名;
という命令です。FIRSTを指定すれば、移動させるカラムが先頭にきます。
もしも先頭以外に移動したい場合は、AFTERを使います。
例えば、nameの後ろがいいなら
ALTER TABLE my_tb MODIFY id VARCHAR(10) AFTER name;
となります。
今回は先頭に移動させたいので、FIRSTを使い
mysql> ALTER TABLE my_tb MODIFY id VARCHAR(10) FIRST;
となり
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
と表示されます。実際に確認すると
mysql> DESC my_tb;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | varchar(10) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
と最初に来ていることがわかります。
以上の方法により、カラムを変更できることがわかったかと思います。
著者:安井 真人(やすい まさと)
@yasui_masatoさんをフォロー