制約の削除

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

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

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

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

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

注釈

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

このトピックの内容:

制約の削除

一意/主/外部キー制約を明示的に削除できます。(ALTER TABLE...DROP CONSTRAINT ...):

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

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

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

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

列の削除

ALTER TABLE...DROP COLUMN...を使用すると、列は削除されます。制約の削除と同様に動作します。

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

デフォルトの削除オプションはCASCADEです。つまり、削除される列を含む制約もすべて削除されます。列に関係する主/一意キーが他の外部キー制約によって参照される場合、参照外部キーはすべて削除されます。

  • RESTRICTオプションが指定されていて、列に外部キー参照を持つ主/一意キーがある場合、エラーが返されます。削除コマンドは、削除される列に定義された制約または参照されている列がない場合にのみ成功します。

テーブル/スキーマ/データベースの削除

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

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

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

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

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

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