外部キー制約のチェックを無効にするMysql固有の命令に相当するものはありますか?
SET FOREIGN_KEY_CHECKS = 0;
3 に答える
SET FOREIGN_KEY_CHECKS = 0;
セッションベースです。Oracle のコンテキストでは、循環参照がある場合にこれを行う必要があるとしか想像できません。
これがあなたがやりたいことだとコメントしました:
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE table1;
DROP TABLE table2;
SET FOREIGN_KEY_CHECKS = 1;
これは、TABLE1 には TABLE2 を参照する外部キーがあり、TABLE2 には TABLE1 を参照する外部キーがあることを意味すると想定しています。
この場合、Moudiz の答えは正しいです。テーブルを削除する前に外部キーを無効にしたい場合:
alter table table1 disable constraint <constraint_name>;
alter table table2 disable constraint <constraint_name>;
drop table table1;
drop table table2;
セッションの間、すべての外部キーを無効にしても意味がありません。関心があるのはそのうちの 2 つだけであり、どちらもテーブルと共に削除されます。
すべての外部キーを無効にしたくはありません。
私がこれについて考えることができる他の唯一のコンテキストは、循環参照に何かを挿入したい場合です。その場合、制約を DEFERRABLE として宣言します。これは、実行中の DML ではなく、トランザクションの最後に制約チェックが行われることを意味します。ドキュメントを参照してください。
参照が循環的でない場合は、単純にテーブルを別の順序でドロップします。
外部キーを無効にするクエリを要求している場合は、これを試してください:
ALTER TABLE
mytable 無効 CONSTRAINT fk_mytable;