更改mySQL表以添加外键时出现错误#1452

时间:2011-03-31 21:54:51

标签: mysql foreign-keys alter-table

尝试帮助实习生完成项目。她希望将外键添加到现有表中,但是这个查询:

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

任何人都知道出了什么问题?

2 个答案:

答案 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值的有效引用。