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 课程代码中。

我的 coursemaster 表结构

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的级联更新”。

因此,如果您希望“coursesubject”在编辑“coursemaster”时更改其“course_code”,那么FOREIGN KEY约束会继续“coursesubject”——而不是在这里。

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

于 2013-11-04T05:27:02.863 回答