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