SQL ALTER TABLE

概要: このチュートリアルでは、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 テーブルに新しい列を追加する例をいくつか見てみましょう。

SQL ALTER TABLE - courses table

次のステートメントは、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 NULLUNIQUEデータ型)を変更できます。

次のステートメントは、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つ以上の列を追加、変更、および削除する方法を段階的に学習しました。

このチュートリアルは役に立ちましたか?