尝试帮助实习生完成项目。她希望将外键添加到现有表中,但是这个查询:
ALTER TABLE `document`
ADD CONSTRAINT `document_ibfk_1` FOREIGN KEY (`cle_author`)
REFERENCES `author` (`id_author`)
ON DELETE CASCADE
ON UPDATE CASCADE;
给出了这个错误:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`wrc_mysql`.<result 2 when explaining filename '#sql-30e4_7000d'>, CONSTRAINT `document_ibfk_1` FOREIGN KEY (`cle_author`) REFERENCES `author` (`id_author`) ON DELETE CASCADE ON UPDATE CASCADE)
架构是这样的
CREATE TABLE `document` (
`id_document` int(11) NOT NULL AUTO_INCREMENT,
`abstract` text,
`number_of_pages` int(10) DEFAULT NULL,
`original_surrey_citation` varchar(255) DEFAULT NULL,
`updated_citation` varchar(255) DEFAULT NULL,
`library_of_congress` varchar(10) DEFAULT NULL,
`cross_citation` varchar(50) DEFAULT NULL,
`doc_type` varchar(255) DEFAULT NULL,
`questions` varchar(255) DEFAULT NULL,
`keywords` varchar(255) DEFAULT NULL,
`cle_author` int(10) NOT NULL,
PRIMARY KEY (`id_document`),
KEY `cle_author` (`cle_author`)
) ENGINE=InnoDB AUTO_INCREMENT=22591 DEFAULT CHARSET=utf8
CREATE TABLE `author` (
`id_author` int(10) NOT NULL AUTO_INCREMENT,
`author_name` varchar(255) DEFAULT NULL,
`sender_office` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id_author`),
KEY `author_name` (`author_name`,`sender_office`)
) ENGINE=InnoDB AUTO_INCREMENT=22591 DEFAULT CHARSET=utf8
任何人都知道出了什么问题?
答案 0 :(得分:3)
您的两个表之间可能存在不一致的数据。此错误表示您的cle_author
表中的document
值在author
表中没有相应的条目。由于cle_author
值将设置为外键,因此该字段的每个值必须在author
表的id_author
字段中具有相应的条目。
答案 1 :(得分:0)
根据此页面:Mysql error 1452 - Cannot add or update a child row: a foreign key constraint fails
使用
检查实习生的数据SELECT cle_author FROM document doc LEFT JOIN作者ON doc.cle_author = a.id_author WHERE a.id_author IS NULL;
发现她的所有cle_author数据都是假的,并且没有对id_author值的有效引用。