ここでは、データベースの各テーブルの列のデータ型を変更したり、新しい列を追加する等の、テーブル構造の修正を行います。
また、列に対して、主キーや外部キー、NOT NULL制約の設定などを行います。
列構造の変更
テーブルの作成は、運用を始める前に考えられるあらゆることを検討した上で作成を始めるべきですが、運用していると、どうしてもテーブルを変更しなければならない場面が出てきます。
例えば
- 長い文字数のデータが出てきた
- 新しい列を追加したい
- 不必要になった列を削除したい
など。
また、これまでの解説では列名とデータ型のみを指定していましたが、「列に制約をつけたい」といったことも出てきます。
このような列構造を変更する時には、次ような「ALTER TABLE」コマンドを使います。
列のデータ型を変更する:
ALTER TABLE ・・・ MODIFY ・・・列を追加する:
ALTER TABLE ・・・ ADD ・・・列の名前と定義を変更する:
ALTER TABLE ・・・ CHANGE ・・・列を削除する:
ALTER TABLE ・・・ DROP ・・・
【書式】列のデータ型を変更する
ALTER TABLE テーブル名 MODIFY 列名 データ型;
列に登録するデータの文字数が増えたといった場合には、列のデータ型を変更することができます。
ただし、対応可能なデータ型に変更しなければ、意味のないデータになってしまうこともありますので、慎重に行う必要があります。
また、VARCHAR(100)型で入力していた列を、VARCHAR(50)に変更してしまうと、50文字は消えてしまいます。
次の例は、[kokyaku_master]の「address」のデータ型を「VARCHAR(50)」から「VARCHAR(10)」に変更しています。
maysql> ALTER TABLE kokyaku_master MODIFY address VARCHAR(10); Query OK, 7 rows affected, 7warnings (0.12 sec)
DESCコマンドでデータ型が変更されていることを確認します。
格納できる文字数を10文字に変更したため、あふれた値は切り捨てられていることが分かります。
列にデータが登録されている場合は、上のようなことも起こるので、基本的にはデータ型を変更すべきではありません。
列の追加
【書式】列の追加
ALTER TABLE テーブル名 ADD 列名 データ型;
上の書式を使うと、列は最後尾に追加されます。
次の例は、[syain_master]テーブルに生年月日のデータを入力するための「birthday」の列を、「DATE型」で追加しています。
mysql> ALTER TABLE syain_master ADD birthday DATE; Query OK, 7 rows affected (0.36 sec)
テーブル構造を確認すると、列が追加されていることが分かります。
テーブルにすでにデータが登録されている場合は、追加した列には、NULL値が入ります。
1行データを追加してみます。
「M000P、松本浩太、T0051、1970/7/28」
【書式】列を先頭に追加する
ALTER TABLE テーブル名 ADD 列名 データ型 FIRST;
上の書式を使うと、列は先頭に追加されます。
次の例は、[syain_master]テーブルに登録された社員の人数を数えるための連番の列を、列名「serial_no」、データ型「INT」で、先頭に追加しています。
mysql> ALTER TABLE syain_master ADD serial_no INT FIRST; Query OK, 8 rows affected (0.05 sec)
「serial_no」列が先頭に追加されていることがわかります。
すでに登録されているレコードには、NULL値が入ります。
【書式】列を自由な位置に追加する
ALTER TABLE テーブル名 ADD 追加する列名 データ型 AFTER 新しい列をどの列の後ろに追加するか;
列の位置を決めたい時には、「AFTER」の後ろに、新しい列をどの列の後ろに追加したいか列名を指定します。
次の例は、名前のフリガナを入力するための「furigana」列(データ型 VARCHAR(20))を[syain_name]の後ろに追加しています。
mysql> ALTER TABLE syain_master ADD furigana VARCHAR(20) AFTER syain_name; Query OK, 8 rows affected (0.35 sec)
「furigana」列が、[syain_name]列の後ろに追加されていることが分かります。
すでに登録されているレコードには、NULL値が入ります。
【書式】列の順番の変更
ALTER TABLE テーブル名 MODIFY 変更する列名 データ型 AFTER 新しい列をどの列の後ろに追加するか;
ALTER TABLE テーブル名 MODIFY 変更する列名 データ型 FIRST;
次の例は、[birthday]列(データ型 DATE)を[furigana]の直後に移動しています。
mysql> ALTER TABLE syain_master MODIFY birthday DATE AFTER furigana; Query OK, 8 rows affected (0.34 sec)
[birthday]列(データ型 DATE)が、[furigana]の直後に移動していることがわかります。
登録されたレコードの列の順番が、入れ替わっていることが分かります。
列名とデータ型の変更
【書式】列名、データ型、位置を変更する
ALTER TABLE テーブル名 CHANGE 変更前列名 変更後列名 変更後データ型 AFTER 列名もしくはFIRST;
列名、データ型、位置を同時に変更したい場合には「CHANGE」を使います。
次の例は、[birthday]列を「date_of_birth」という列名に変更し、データ型を日付と時間が登録できる「DATETIME」にし、最後尾に移動しています。
mysql> ALTER TABLE syain_master CHANGE birthday date_of_birth DATETIME AFTER shop_no; Query OK, 8 rows affected (0.04sec)
列名は「date_of_birth」に、データ型は「DATETIME」に変更され、最後尾に移動していることが分かります。
すでに登録されているレコードの列名と列順、データ型が変更されています。
列の削除
【書式】列の削除
ALTER TABLE テーブル名 DROP 列名;
削除するには「DROP」を使います。
次の例は、[date_of_birth]列を削除しています。
mysql> ALTER TABLE syain_mater DROP date_of_birth; Query OK, 8 rows affected (0.04 sec)
[date_of_birth]列が削除されていることがわかります。
登録されているレコードからも、[date_of_birth]列が削除されていることが分かります。
参考図書
LINE公式アカウント
仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】