プライマリキーをドロップするときのみ、制約を削除するオプションが必要です。外部キーを削除するときには使用しないでください。
Postgresの中で、この例を考えてみましょう:
create table t1 (id integer, constraint pk_one primary key (id));
create table t2 (id integer primary key, id1 integer references t1);
あなたが実行しようとすると:
alter table t1 drop constraint pk_one;
あなたが得る:
ERROR: cannot drop constraint pk_one on table t1 because other objects depend on it
Detail: constraint t2_id1_fkey on table t2 depends on index pk_one
Hint: Use DROP ... CASCADE to drop the dependent objects too.
あなたが実行している場合:
alter table t1 drop constraint pk_one cascade;
あなたが得る:
NOTICE: drop cascades to constraint t2_id1_fkey on table t2
は、主キーを必要とする外部キーも同様にドロップされたことを知らせます。
すべてのDBMSがカスケードドロップをサポートするわけではないことに注意してください。 PostgresとOracleはそうしています。
MySQL、SQL Server、またはFirebirdはサポートしていません。それらのDBMSに手動で外部キーをドロップする必要があります。
私は外来キーの仕組みが広すぎることを説明すると思います。データベースのドキュメントは、これをかなりうまくカバーしています。アイデアはデータベース全体でほぼ同じです。以下は、MySQLのドキュメントです:https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html。 –
どのDBMSを使用していますか? –
@ GordonLinoff私は外部キーがどのように動作するかを研究しましたが、キーワードCASCADEを削除する必要があるかどうかはわかりません。つまり、table2を参照してtable1から外部キーを作成し、CASCADEキーワードを使用してtable2を削除すると、外部キーが削除されます。私はDBMSの場合、私はコマンドの実行後に何も削除しませんALTER TABLE table1 DROP CONSTRAINT foreignKeyToTable2 CASCADE。 – Nisba