5

部署名への外部キーに影響を与えずに、学校のテーブルからレコードを削除したいと考えています。試してみましたが、次のメッセージが表示されました。

「親行を削除または更新できません: 外部キー制約が失敗しました ( arusms. department, CONSTRAINT department_ibfk_1FOREIGN KEY ( school_name) REFERENCES school( school_name) ON UPDATE CASCADE)」

4

3 に答える 3

3

なぜそんなことをしたいのかわかりません。学校を削除すると、学部は孤立します。これが、参照整合性を強化するために、そもそも外部キーを持つことのポイントです。部門を残してこれを実行できるようにする場合は、外部キーを変更してON DELETESETNULLを含める必要があります。それ以外の場合は、制約を削除し、削除を実行して、制約を再作成する必要があります。

于 2012-04-19T16:35:35.523 に答える
2

あなたのエラーメッセージは本当の原因を隠しています.

(
arusms.department, 

CONSTRAINT department_ibfk_1 
  FOREIGN KEY (school_name) 
  REFERENCES school (school_name) 
  ON UPDATE CASCADE
)

外部キー制約を作成したときに、そのON DELETE部分を省略しました。MySQL はこれにデフォルトのアクションを使用しましたON DELETE RESTRICT。MySQL のドキュメントを参照してください:FOREIGN KEY制約

関連する部門に影響を波及させずに学校を削除できるようにしたい場合は、次のいずれかを実行できます。

  • FK 制約を削除するか、

  • 列 ( department.school_name) をヌル可能にし、制約を変更してON DELETE SET NULLアクションを実行します。

学校を削除し、関連する部門をカスケード削除できるようにしたい場合は、次のことができます。

  • アクションを持つように制約を変更しますON DELETE CASCADE
于 2012-04-20T06:55:06.990 に答える
1

外部キーを持つことの全体的な目的は、データの一貫性を保つことです。あなたの場合、それぞれに対応するレコードdepartmentが存在する必要があることを意味します。schoolまた、学校の場合はDELETE、対応するすべての学部も削除するか、少なくともそれらのschool参照をNULL編集する必要があります。

この種の強制が必要ない場合はDROP、外部キー。

または、学部を別の学校に再割り当てしたい場合は、最初にそれを行い、その後DELETEで元の学校に移動します。

于 2012-04-19T16:36:21.970 に答える