我有一个表名称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
答案 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”上进行 - 而不是在此处。
根据您到目前为止发布的内容,抛出错误的外键定义甚至没有意义,因为外键无法引用自身。