テーブルのカラム構造を変更する

前回、テーブルを作成する方法を紹介しました。

テーブルを作成する際、あらかじめカラム(列)の内容を決めて、データを入れていきました。

しかし、データベースを扱っている際に、カラムの追加や削除などの変更をしたい場合があります。

そこで、ここではカラムの

  1. 定義の変更
  2. 名前と定義の変更
  3. 追加と削除
  4. 位置の変更

を解説します。

 

はじめに以下の様なテーブルがあったとします。

id(VARCHAR(10)) name(VARCHAR(10)) age(INT)
taro 山田太郎 21
hanake 佐藤花子 12
kondo 近藤武蔵 24

前回の記事と同じ内容のテーブルです。

作り方などに関しては前回の記事を参考にしてください。

テーブルの名前はmy_tbです。

カラムのデータ型を変更する

 では、カラムのデータ型を変更する方法を紹介します。

いまidのデータ型はVARCHAR(10)ですが、もう少し容量を増やしたいということでVARCHAR(20)に変更したいとします。

このようにデータ型を変更するには

ALTER TABLE テーブル名 MODIFY カラム名 データ型;

 

という命令を使います。今回はテーブルmy_tbのカラムidのデータ型VARCHAR(10)をVARCHAR(20)へ変更したいので

mysql> ALTER TABLE my_tb MODIFY id 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)へ変更したいとします。

このとき

ALTER TABLE テーブル名 CHANGE 変更前のカラム名 変更後のカラム名 変更後のデータ型;

 

という命令を使います。さっそく使ってみると

mysql> ALTER TABLE my_tb CHANGE id id1 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;

とすれば

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);

とすれば

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;

となり

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)

と最初に来ていることがわかります。

 

以上の方法により、カラムを変更できることがわかったかと思います。

著者:安井 真人(やすい まさと)