0

テーブル名 coursemaster があり、2 列のコース コードとコース名があり、別のテーブル coursesubject には 2 列のコース コードと科目コードがあり、親子関係を適用しました。coursemaster のコース コードの値を更新すると、エラーが表示されます。

#1451 - Cannot delete or update a parent row: a foreign key constraint fails (`latest`.`coursemaster`, CONSTRAINT `coursemaster_ibfk_1` FOREIGN KEY (`course_code`) REFERENCES `coursemaster` (`course_code`) ON UPDATE CASCADE)

しかし、ccoursemaster テーブルのコースコードを更新したいのですが、それは coursesubject coursecode に反映されるべきです。

私のコースマスターテーブル構造

Field   Type    Collation   Attributes  Null    Default Extra   Action
    id  int(11)         No  None    AUTO_INCREMENT   Browse distinct values  Change  Drop    Primary     Unique  Index  Fulltext
    course_code varchar(255)    latin1_swedish_ci       No           Browse distinct values  Change  Drop    Primary     Unique  Index  Fulltext
    course_name varchar(255)    latin1_swedish_ci       Yes NULL         Browse distinct values  Change  Drop    Primary     Unique  Index  Fulltext

インデックス: ドキュメント

Action  Keyname Type    Unique  Packed  Field   Cardinality Collation   Null    Comment
Edit    Drop    PRIMARY BTREE   Yes No  course_code 13  A       
Edit    Drop    id  BTREE   Yes No  id  13  A       
Edit    Drop    course_code BTREE   Yes No  course_code 13  A       

コースサブジェクト構造

Field   Type    Collation   Attributes  Null    Default Extra   Action
    id  int(11)         No  None    AUTO_INCREMENT   Browse distinct values  Change  Drop    Primary     Unique  Index  Fulltext
    course_code varchar(255)    latin1_swedish_ci       Yes NULL         Browse distinct values  Change  Drop    Primary     Unique  Index  Fulltext
    subject_code    varchar(255)    latin1_swedish_ci       Yes NULL         Browse distinct values  Change  Drop    Primary     Unique  Index  Fulltext

インデックス: ドキュメント

Action  Keyname Type    Unique  Packed  Field   Cardinality Collation   Null    Comment
Edit    Drop    PRIMARY BTREE   Yes No  id  2   A       
Edit    Drop    subject_code    BTREE   No  No  subject_code    2   A   YES 
Edit    Drop    courseindex BTREE   No  No  course_code 2   A   YES 
subject_code    2   A   YES
4

1 に答える 1

0

ここでの最初の問題は明白なようですが、サーバーが許可しないため、最近のバージョンの MySQL でこれを複製することさえできません...正確にこの状況に陥った方法は不明です、しかし、ここに私が見るものがあります:

`latest`.`coursemaster`, 
CONSTRAINT `coursemaster_ibfk_1` 
FOREIGN KEY (`course_code`) 
REFERENCES `coursemaster` (`course_code`) ON UPDATE CASCADE

「coursemaster」の「course_code」を実際に列自体に対する外部キー制約にすることができたようです。または、「最新」が現在のデータベースでない場合は、このテーブルを制約することができましたサーバー上の他の場所にある同様の名前のテーブル。

「テーブル A」を変更するときに「テーブル B」のデータを変更する場合は、「テーブル A」で外部キー制約を宣言しません。「テーブル B」で宣言します。ここで、テーブル Aを参照します。 . は、「他のテーブルからこのテーブルON UPDATE CASCADEに更新をカスケードする」ことを意味します。

したがって、「coursemaster」を編集するときに「coursesubject」の「course_code」を変更する場合、FOREIGN KEY制約は「coursesubject」に適用されますが、ここではありません。

これまでに投稿した内容に基づいて、外部キーはそれ自体を参照できないため、エラーをスローしている外部キーの定義は意味がありません。

于 2013-11-04T05:27:02.863 に答える