制約の削除

次の ALTER TABLE コマンドを使用して、制約は削除されます。

  • ALTER TABLE ... DROP CONSTRAINT は指定された制約を明示的に削除します。制約の変更と同様に、制約の名前または列定義と制約タイプによって制約を識別できます。主キーの場合、PRIMARY KEYキーワードを使用して制約を識別することもできます。

  • ALTER TABLE ... DROP COLUMN は列とそれに関連する制約を削除します。

デフォルトでは、主または一意キーが削除されると、RESTRICT削除オプションが指定されていない限り、削除されるキーを参照するすべての外部キーも削除されます。

関連するテーブル、スキーマ、またはデータベースが削除されると、制約も削除されます。DROPコマンドは、CASCADE | RESTRICT削除オプションをサポートします。

注釈

UNDROPコマンドを使用して、削除したテーブル、スキーマ、データベースを復元できます。削除された列と制約は復元できません。

制約の削除

ALTER TABLE ... DROP CONSTRAINTコマンドを使用して、UNIQUE、PRIMARY KEY、FOREIGN KEY、およびCHECK制約を明示的に削除できます。

ALTER TABLE <table_name> DROP { CONSTRAINT <name> | PRIMARY KEY | { UNIQUE | FOREIGN KEY } (<column>, [ ... ] ) } [ CASCADE | RESTRICT ]

これらの制約の場合、FOREIGN KEY制約または外部キー参照のない主または一意キー制約を削除すると、制約は直接削除されます。

デフォルトの削除オプションは、CASCADEです。つまり、外部キー参照を持つ一意または主キーを削除すると、参照外部キーと一意または主キーがすべて削除されます。

RESTRICT削除オプションが指定されている場合、主または一意キーを削除するときに、削除されるキーを参照する外部キーが存在するとエラーが返されます。

列のドロップ

ALTER TABLE ... DROP COLUMN の使用による列のドロップは、制約のドロップと同様に動作します。

ALTER TABLE <table_name> DROP COLUMN <name> [ CASCADE | RESTRICT ]

PRIMARY KEY、UNIQUE、FOREIGN KEY制約の場合、デフォルトの削除オプションはCASCADEです。つまり、削除される列を含む制約もすべて削除されます。列に関係する主または一意キーが他のFOREIGN KEY制約によって参照される場合、参照外部キーはすべて削除されます。RESTRICTオプションが指定されている場合、列に外部キー参照を持つ主キーまたは一意キーがある場合、エラーが返されます。削除コマンドは、削除される列に定義された制約または参照されている列がない場合にのみ成功します。

単一の列を参照するCHECK制約の場合、デフォルトの削除オプションはCASCADEです。ただし、複数の列を参照するCHECK制約の場合、デフォルトの削除オプションはRESTRICTです。これにより、データの整合性に必要な可能性のある制約が誤って削除されることを防ぎます。

テーブル、スキーマ、およびデータベースの削除

DROPコマンドは、指定されたテーブル、スキーマ、またはデータベースを削除し、オブジェクトに関連付けられているすべての制約を削除するようにも指定できます。

DROP { TABLE | SCHEMA | DATABASE } <name> [ CASCADE | RESTRICT ]

列と制約の削除と同様に、CASCADEはデフォルトの削除オプションであり、削除されるオブジェクトに属する、または参照するすべての制約も削除されます。

例えば、データベースを削除するときに、別のデータベースの外部キーによって参照される主または一意キーがデータベースに含まれている場合、参照外部キーも削除されます。

オブジェクトが後で削除解除されると、以前に削除されたすべての関連する制約が復元されます。

RESTRICTオプションが指定されている場合、オブジェクトのいずれかのPRIMARY KEYまたはUNIQUE制約に外部キー参照があると、エラーが返されます。