我有一个表名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课程代码中。

我的课程管理员表结构

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

最佳答案

这里的第一个问题似乎很明显,尽管我什至无法在最新版本的MySQL上进行复制,因为服务器不允许这样做……因此,究竟如何设法使自己处于这种情况尚不清楚,但我看到的是:

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


您似乎设法以某种方式设法使“ coursemaster”中的“ course_code”实际上是对该列本身的外键约束,或者,如果“ latest”不是当前数据库,那么您已经设法将该表约束为服务器上其他位置的类似名称的表。

如果要在修改“表A”时更改“表B”中的数据,则不要在“表A”上声明外键约束,而是在“表B”上声明外键约束,在此引用表A。 ON UPDATE CASCADE表示“从另一个表到该表的级联更新”。

因此,如果您要在编辑“ coursemaster”时使“ coursesubject”更改其“ course_code”,则FOREIGN KEY约束将在“ coursesubject”上进行-不在此处。

根据您到目前为止发布的内容,引发错误的外键定义甚至都没有意义,因为外键无法引用自身。

08-27 03:32