SQLのALTER TABLE文とは?カラム追加・削除からテーブル名変更まで徹底解説
SQLのALTER TABLE文は、テーブルに対してカラムの追加・変更・削除を行うためのコマンドです。この文を使えば、テーブルを作成した後でも、すでにレコードが保存されている状態であっても、構造を柔軟に変更できます。
データベースを運用していると、「カラム名を変更したい」「新しいカラムを追加したい」といった場面に必ず出会います。そんなときに活躍するのが、SQLのALTER TABLEコマンドです。
SQLのALTER TABLEとは
ALTER TABLEコマンドを使うと、既存のテーブルに対して以下のような操作が可能になります。
- カラムの追加
- 制約(CONSTRAINT)の追加
- カラムの削除
- データ型の変更
- カラム名やテーブル名の変更
この記事では、具体的なサンプルコードとともに、ALTER TABLEを使ったテーブル変更の方法をわかりやすく解説します。
サンプルテーブルの準備
このチュートリアルでは、ある企業の従業員情報を管理するデータベーステーブルを例に説明します。テーブル名は「employees」で、従業員ごとの氏名や役職などの情報が格納されています。
テーブルを作成した後で「構造を変えたい」と思うことはよくあります。そんなときこそ、ALTER TABLEコマンドの出番です。
なお、テーブルの作成方法については、SQL CREATE TABLEの解説記事もあわせて参考にしてください。
ALTER TABLEでカラムを追加する
既存のテーブルに新しいカラムを追加するには、次の構文を使用します。
ALTER TABLE テーブル名 ADD カラム名 データ型 制約;
例として、従業員の電話番号を保存するための「phone_number」というカラムを、employeesテーブルに追加してみましょう。データ型には最大長を持つ文字列を格納できるVARCHAR()を使用し、制約は設定しないものとします。
この場合、以下のように記述します。
ALTER TABLE employees ADD phone_number VARCHAR(60);
このコマンドを実行すると、employeesテーブルに新しいカラムが追加されます。テーブルの構造を確認すると、「phone_number」というカラムが増えていることがわかります。
| Field | Type | Default |
| name | varchar(60) | NULL |
| title | varchar(60) | NULL |
| department | varchar(60) | NULL |
| employee_number | varchar(60) | NULL |
| phone_number | varchar(60) | NULL |
SQLでのカラム追加についてさらに詳しく知りたい方は、SQL ADD COLUMNの解説記事もチェックしてみてください。
ALTER TABLEで制約を追加する
前のセクションではphone_numberカラムを追加しましたが、制約を設定していませんでした。
このままでは、複数の従業員に同じ電話番号が登録される可能性があり、実運用では好ましくありません。
そこで、phone_numberカラムにUNIQUE制約を追加しましょう。SQLでカラムに制約を追加する構文は次のとおりです。
ALTER TABLE テーブル名 ADD UNIQUE (カラム名);
実際にphone_numberカラムへUNIQUE制約を追加するコマンドは、以下のようになります。
ALTER TABLE employees ADD UNIQUE (phone_number);
別の制約を追加したい場合は、「UNIQUE」の部分を他のSQL制約(NOT NULLなど)に置き換えるだけでOKです。
ALTER TABLEでカラムを削除する
ALTER TABLEコマンドは、テーブルからカラムを削除する際にも使えます。構文は以下のとおりです。
ALTER TABLE テーブル名 DROP COLUMN カラム名;
例えば、departmentカラムを一度削除し、後ほど従業員の部署情報を別テーブルと紐付ける形で作り直したいとします。この場合、次のコマンドで削除できます。
ALTER TABLE employees DROP COLUMN department;
コマンド実行後、departmentカラムはテーブルから取り除かれ、テーブルの構造は以下のようになります。
| Field | Type | Default |
| name | varchar(60) | NULL |
| title | varchar(60) | NULL |
| employee_number | varchar(60) | NULL |
| phone_number | varchar(60) | NULL |
ALTER TABLEでカラムのデータ型を変更する
ALTER TABLEコマンドを使うと、カラムのデータ型を変更することもできます。標準的な構文は次のとおりです。
ALTER TABLE テーブル名 ALTER COLUMN カラム名 新しいデータ型;
ただし、DBMSによって構文が異なる点に注意が必要です。MySQLおよびOracle 10Gより前のバージョンではMODIFY COLUMNを、Oracle 10G以降ではMODIFYを使用します。
ALTER TABLE テーブル名 MODIFY COLUMN カラム名 新しいデータ型; (MySQL、Oracle 10G以前) ALTER TABLE テーブル名 MODIFY カラム名 新しいデータ型; (Oracle 10G以降)
例えば、employeesテーブルを作成した際に、employee_numberフィールドを誤って数値型ではなくVARCHAR()として定義してしまったとします。このミスを修正するには、次のコマンドを実行します。
ALTER TABLE employees ALTER COLUMN employee_number INT;
これにより、employee_numberカラムのデータ型がINTに変更されます。変更後のテーブル構造は以下のとおりです。
| Field | Type | Default |
| name | varchar(60) | NULL |
| title | varchar(60) | NULL |
| employee_number | int | NULL |
| phone_number | varchar(60) | NULL |
ALTER TABLEでテーブル名を変更する
ALTER TABLEコマンドは、テーブル名の変更にも対応しています。構文は以下のとおりです。
ALTER TABLE 現在のテーブル名 RENAME 新しいテーブル名;
例えば、employeesテーブルを「old_employees_2019」という名前に変更したい場合は、次のように実行します。
ALTER TABLE employees RENAME old_employees_2019;
ただし、MySQLではALTER TABLEコマンドによるテーブル名の変更はできません。MySQLの場合は、代わりにRENAME TABLEコマンドを使用します。
MySQLでテーブル名を変更するには、以下のコマンドを実行します。
RENAME TABLE employees TO old_employees_2019;
まとめ
SQLのALTER TABLEコマンドを使うと、データベース内のテーブル構造を柔軟に変更できます。カラムの追加・削除、データ型の変更に加えて、UNIQUEやNOT NULLといった制約の変更も可能です。
さらにSQLについて学びたい方は、SQL学習ガイドもぜひ参考にしてください。効果的な学習方法のコツや、専門家が厳選した学習リソースのリストを紹介しており、着実にスキルアップを目指せます。
-
SQL ServerでALTER TABLEスクリプトを生成する方法
```html はじめにSQL Server 2005を使用していると、データベースに新しい列を追加したり、フィールドの型を変更したりする際に、ALTER TABLEスクリプトを生成したい場面に遭遇することがあります。通常のスクリプト生成方法CREATE、SELECT、UPDATEなど特定のSQLステートメントのスクリプトを生成したい場合は、通常、SQL Server Management Studioで対象のテーブルを右クリックし、「スクリプト テーブル(Script Table as)」から目的の操作を選択するだけで簡単に行えます。ALTER TABLEは右クリックメニューからは生成できな
-
MySQLでVARCHAR型のカラムをNULL許容に変更する方法
MySQLでは、テーブルのカラム定義を後から変更できます。既存のVARCHAR型カラムをNULL値を許容する設定に変更したい場合は、ALTER TABLE文とCHANGE句を組み合わせて使用します。基本構文カラムをNULL許容に変更するには、以下の構文を使用します。ALTER TABLE テーブル名 CHANGE 変更前カラム名 変更後カラム名 データ型 NULL DEFAULT NULL;ポイントは、CHANGE句の後に「現在のカラム名」と「新しいカラム名」の両方を指定する必要がある点です。カラム名を変えない場合でも、同じ名前を2回記述します。また、データ型も改めて指定する必要があります。実