7

を参照する1primary keyつと1 つのテーブルがあります。つまり、同じテーブルに親と子がいます。SQL サーバーには、削除ルールの 3 つのオプションがあります。ただし、削除ルールを設定することしかできません。サイクルや連鎖のため を設定できないことは承知しております。しかし、他のオプションが許可されていないのはなぜですか? 特にその1。foreign keysame table primary key"NO ACTION""cascade" delete"SET NULL"

現在、これを手動で行う必要があります。子レコードを見つけて、外部キーを null に設定する必要があります。その後、親を削除できます。ルールを設定できないのはなぜですか?

4

1 に答える 1

3

同じテーブルで次の 2 つのアクションを一緒に実行できないためです。

-親を削除します。

-子を更新します。

変更テーブルとは、UPDATE、DELETE、または INSERT ステートメントによって変更されているテーブル、または DELETE CASCADE 制約の影響によって更新される可能性のあるテーブルです。

親キーを保持してレコードを削除し、子をNULLに設定するプロシージャを作成することで、手動で行うことを克服できます。

procedure(parent_id) --takes the id as a parameter

   update table set null where foreign_key = parent_id;

   delete from table where id = parent_id;

end;
于 2018-03-02T20:25:13.403 に答える