建立父子关系时,更新无效

时间:2013-11-04 04:11:03

标签: mysql foreign-key-relationship

我有一个表名称coursemaster它有2个列的课程代码和课程名称和另一个表课程主题它有2个列课程代码和主题代码,我应用了父子关系。当我在课程代码中更新一个值时,它会显示错误

#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

1 个答案:

答案 0 :(得分:0)

这里的第一个问题似乎是显而易见的,虽然我甚至无法在最新版本的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”上声明它,在那里它 REFERENCES 表A. ON UPDATE CASCADE表示“从其他表到此表级联更新。”

因此,如果您希望“coursesubject”在编辑“coursemaster”时更改其“course_code”,则FOREIGN KEY约束会在“coursesubject”上进行 - 而不是在此处。

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