テーブルの変更

ALTER TABLE

テーブルを生成する命令として、CREATE TABLE、そして削除する命令として、DROP TABLEがあるということを、基本編の2日目で説明しました。これらは、いずれもデータ定義言語(DDL)と呼ばれるものです。ここでは、耗一つのDDLである、ALTER TABLEについて説明します。

すでに作成済みのテーブルに列を追加するのが、このALTER TABLEコマンドです。書式は次の通りです。使用方法としては、テーブル名の変更、と、列の追加、更新、さらに、削除について利用できます。以下、それぞれのケースについて説明します。

テーブル名の変更

まずは、データベースのテーブル名を変更する方法を説明します。ALTER TABLEでの、テーブル名の変更を行うは、以下のような書式になります。

テーブル名の変更
ALTER TABLE 旧テーブル名 RENAME TO 新テーブル名;

では実際に、これを利用したサンプルを実行してみましょう。

Sampleex201.sql
ALTER TABLE student RENAME TO student_list;

これにより、studentテーブルを、student_listテーブルに変更します。SQL実行後、DBViewerの左端のデータベースschoolに出てくるテーブル一覧を見てみましょう。(図2-1.)

図2-1.テーブル名の変更①
テーブル名の変更①

ここに出てくるテーブルの名前はは、studentになっています。そこで、このツリーの「TABLE」の部分を右クリックし、「更新」をクリックしてください。(図2-2.)

図2-2.テーブル名の変更②
テーブル名の変更②

すると、studentテーブルの名前が、student_tableに変わっているのが分かります。(図2-3.)

図2-3.テーブル名の変更③
テーブル名の変更③

これにより、テーブルの名前が変わったことが確認できます。

列の追加

続いて、テーブルに列を追加する方法を説明します。ALTER TABLEで、列を追加するための書式は以下のようになります。

列の追加
ALTER TABLE テーブル名 ADD 列名列の型[制約][オプション];

ADDの後に、追加するカラム定義を指定します。型や制約は、CREATE TABLEの場合と一緒です。

その後に、オプションとして、FIRSTとつけると、列の最初に、AFTERとつけて、列名を指定すると、指定した列の後に列が追加されます。デフォルトでは追加したカラムは既存のテーブルの最後に追加されます。

では実際に、これを利用したサンプルを実行してみましょう。

Sampleex202.sql:列の追加のサンプル①
ALTER TABLE student_list add address varchar(20);

これにより、student_tableテーブルに、address(住所)という列が追加されます。再び「TABLE」を右クリックして、「更新」をクリックしてください。(図2-4.)

図2-4.列の追加①
列の追加①

追加されたaddress列には、値がないため、<NULL>と表示されています。すでにデータが追加されている列にこの値を追加する場合は、UPDATEを利用してください。

続いて、FIRSTを利用したサンプルを実行してみましょう。

Sampleex203.sql:列の追加のサンプル②
ALTER TABLE student_list add age int FIRST;

これにより、student_tableテーブルの先頭の列にage(年齢)列を追加します。再び「TABLE」を右クリックして、「更新」をクリックしてください。(図2-5.)

図2-5.列の追加②
列の追加②

最後に、AFTERを利用したサンプルを実行してみましょう。

Sampleex204.sql:列の追加のサンプル③
ALTER TABLE student_list add sex VARCHAR(2) AFTER name;

これにより、student_tableテーブルのname列の後にsex(性別)列を追加します。再び「TABLE」を右クリックして、「更新」をクリックしてください。(図2-6.)

図2-6.列の追加③
列の追加③

以上のようにすれば、既存のテーブルに新たに列を追加することができます。

列の変更

ALTER TABLEを用いれば、既存のテーブルのデータの名前や型を変更することが可能です。基本的な書式は、以下の通りになります。

列の変更の書式①(CHANGEの場合)
ALTER TABLE テーブル名CHANGE COLUMN 旧列名 新列名 型名[制約](,旧列名 新列名 型名[制約]…);

データが複数ある場合は、間を「,(コンマ)」で区切り、複数の変更を行うことができます。

CHANGE COLUMNは、列名および型、制約が変わりますが、名前を変えず型と制約だけを変更したい場合は、MODIFY句を利用します。書式は以下の通りです。

列の変更の書式②(MODIFYの場合)
ALTER TABLE テーブル名MODIFY COLUMN 列名 型名 [制約](, 列名 型名 [制約]…);

複数のデータを「,」で区切って定義できる点は、CHANGEの場合と一緒です。

では実際に、それぞれの使用例を見てみましょう。まずは、CHANGEの場合から見てみましょう。

Sampleex205.sql:列名の変更サンプル③
ALTER TABLE student_list CHANGE COLUMN name student_name VARCHAR(32) NOT NULL;

これにより、student_listテーブルの「name」という名前が「student_name」に変わり、その型が「VARCHAR(32)」制約が「NOT NULL」に変わります。

では、実際にテーブルが書き変わっていることを確認しましょう。まずは、名前が変わったことを確認します。テーブル情報を更新した上で、テーブル情報を見てみると、名前が変わっていることがわかります。(図2-7.)

図2-7.テーブル名の変更の確認
テーブル名の変更の確認

しかし、これだけでは型と制約が変わったことまでは確認できません。では、どうすれば確認できるのでしょうか?そのためには、まずこのテーブル情報の下部にある、「DDL」というタブをクリックしてください。(図2-8.)

図2-8.型と制約の確認①(DDLタブをクリック)
型と制約の確認①(DDLタブをクリック)

すると、CREATE TABLEでテーブルの型が出ており、そこで、制約が変更されていることが分かります。(図2-9.)

図2-9.型と制約の確認②(CREATE TABLE文)
型と制約の確認②(CREATE TABLE文)

続いて、MODIFYを用いる例を見てみましょう。

Sampleex206.sql:列名の変更サンプル③
ALTER TABLE student_list MODIFY COLUMN grade int NOT NULL;

テーブル情報を更新し、DDLを見ると、これにより、gradeの型が「int」から、「int NOT NULL」に変わっていることが分かります。(図2-10.)

図2-10.型と制約の確認③(MODIFYの場合)
型と制約の確認③(MODIFYの場合)

列の削除

列の削除を行う構文は以下の通りです。

列の削除
ALTER TABLE テーブル名 DROP COLUMN 列名;

では実際に、列の削除を行ってみましょう。

Sampleex207.sql:列の削除のサンプル
ALTER TABLE student_list DROP COLUMN id;

すると、student_listテーブルから、id列が消えていることが分かります。

図2-11.列の削除
列の削除

列を削除した際、もともとその列に合ったデータもすべて消去されるので、注意しましょう。