概要: このチュートリアルでは、SQL ALTER TABLE ステートメントを使用して、データベース内の既存のテーブルの構造を変更する方法を説明します。
新しいテーブルを作成した後、ビジネス要件の変更に伴い、テーブルの構造を変更する必要がある場合があります。テーブルの構造を変更するには、ALTER TABLE ステートメントを使用します。ALTER TABLE ステートメントを使用すると、既存のテーブルに対して次の操作を実行できます。
ADD句を使用して新しい列を追加する。MODIFY句を使用して、制約、デフォルト値などの列の属性を変更する。DROP句を使用して列を削除する。
以下のセクションでは、各操作について詳しく説明します。
SQL ALTER TABLE ADD column(列の追加)
次のステートメントは、テーブルに1つ以上の列を追加できる ADD 句を含む ALTER TABLE ステートメントを示しています。
ALTER TABLE table_name
ADD new_colum data_type column_constraint [AFTER existing_column];Code language: SQL (Structured Query Language) (sql)テーブルに1つ以上の列を追加するには、次の手順を実行する必要があります。
- まず、
ALTER TABLE句の後に、列を追加するテーブルをtable_nameで指定します。 - 次に、
ADD句の後に新しい列の定義を配置します。テーブル内の新しい列の順序を指定する場合は、オプションの句AFTER existing_columnを使用できます。
AFTER 句を省略すると、すべての新しい列がテーブルの最後の列の後に追加されます。
テーブル作成チュートリアルで作成した courses テーブルに新しい列を追加する例をいくつか見てみましょう。

次のステートメントは、courses テーブルに credit_hours という名前の新しい列を追加します。
ALTER TABLE courses ADD credit_hours INT NOT NULL;Code language: SQL (Structured Query Language) (sql)1つの ALTER TABLE ステートメントを使用して、テーブルに複数の列を追加できます。たとえば、次のステートメントは、courses テーブルに fee 列と max_limit 列を追加し、これらの列を course_name 列の後に配置します。
ALTER TABLE courses
ADD fee NUMERIC (10, 2) AFTER course_name,
ADD max_limit INT AFTER course_name;Code language: SQL (Structured Query Language) (sql)SQL ALTER TABLE MODIFY column(列の変更)
MODIFY 句を使用すると、既存の列の属性(例:NOT NULL、UNIQUE、データ型)を変更できます。
次のステートメントは、DROP 句を含む ALTER TABLE ステートメントの構文を示しています。
ALTER TABLE table_name
MODIFY column_definition;Code language: SQL (Structured Query Language) (sql)データがないテーブルの列の属性を変更する必要があります。これは、既にデータがあるテーブルの列の属性を変更すると、データが永久に失われる可能性があるためです。
たとえば、列のデータ型が VARCHAR で、それを INT に変更する場合、データベースシステムはデータを VARCHAR から INT に変換する必要があります。変換が失敗した場合、データベースシステムは列のデフォルト値を使用する可能性があり、これは予期しない結果になる可能性があります。
次の ALTER TABLE MODIFY ステートメントは、fee 列の属性を NOT NULL に変更します。
ALTER TABLE courses
MODIFY fee NUMERIC (10, 2) NOT NULL;Code language: SQL (Structured Query Language) (sql)SQL ALTER TABLE DROP columns(列の削除)
テーブルの列が obsolete で、トリガー、ビュー、ストアドプロシージャなどの他のデータベースオブジェクトで使用されていない場合は、テーブルから削除する必要があります。
1つ以上の列を削除するには、次の構文を使用します。
ALTER TABLE table_name
DROP column_name,
DROP colum_name,
...Code language: SQL (Structured Query Language) (sql)たとえば、courses テーブルの fee 列を削除するには、次のステートメントを使用します。
ALTER TABLE courses DROP COLUMN fee;Code language: SQL (Structured Query Language) (sql)複数の列を同時に削除するには、カンマ(,)で区切られた複数の DROP COLUMN 句を使用します。
たとえば、次のステートメントは、courses テーブルの max_limit 列と credit_hours 列を削除します。
ALTER TABLE courses
DROP COLUMN max_limit,
DROP COLUMN credit_hours;Code language: SQL (Structured Query Language) (sql)このチュートリアルでは、SQL ALTER TABLE ステートメントを使用して、テーブルに1つ以上の列を追加、変更、および削除する方法を段階的に学習しました。