当我修改MySQL表以添加外键时,出现错误#1452

3

我可以帮助您进行翻译。下面是需要翻译的内容:

我正在帮助实习生完成她的项目。她想要给现有表添加外键,但是这个查询语句:

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

有人知道出了什么问题吗?


你的document表中的数据是否与author表中的数据一致?document表中的每个cle_author值是否都有对应的author表中的条目? - CanSpice
1
可能是[Mysql错误1452 - 无法添加或更新子行:外键约束失败]的重复问题。(https://dev59.com/1nM_5IYBdhLWcg3wvFvI) - CanSpice
1
嘿,你是正确的。这个查询显示了错误引用:SELECT cle_author FROM document doc LEFT JOIN author a ON doc.cle_author=a.id_author WHERE a.id_author IS NULL; - jerrygarciuh
那我就把它作为一个正式答案放上来。 :-) - CanSpice
2个回答

4

你的两个表格中可能存在不一致的数据。这个错误意味着在 document 表格中有一个 cle_author 值,但在 author 表格中没有对应的条目。由于 cle_author 值将被设置为外键,因此该字段的每个值都必须在 author 表格的 id_author 字段中有对应的条目。


如果表中的数据不重要:请尝试执行以下操作-> 删除表中所有记录,然后尝试添加外键。 - Kugan Kumar

0
根据此页面:Mysql错误1452-无法添加或更新子行:外键约束失败 使用以下语句检查实习生的数据:
SELECT cle_author FROM document doc LEFT JOIN author a ON doc.cle_author=a.id_author WHERE a.id_author IS NULL;
发现她所有的cle_author数据都是虚假的,没有有效的id_author值参考。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接