【问题标题】:Error #1452 when altering mySQL table to add foreign key更改 mySQL 表以添加外键时出现错误 #1452
【发布时间】:2011-03-31 21:54:51
【问题描述】:

试图帮助一名实习生完成她的项目。她想将外键添加到现有表中,但是这个查询:

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 表中都有对应的条目?
  • 嘿,你是对的。此查询显示错误引用:SELECT cle_author FROM document doc LEFT JOIN author a ON doc.cle_author=a.id_author WHERE a.id_author IS NULL;
  • 我会把它作为一个正确的答案。 :-)

标签: mysql foreign-keys alter-table


【解决方案1】:

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

【讨论】:

  • 如果表中的数据不重要:试试这个 -> 删除表中的所有记录,然后尝试添加外键
【解决方案2】:

每页:Mysql error 1452 - Cannot add or update a child row: a foreign key constraint fails

检查了实习生的数据

从文档文档中选择 cle_author LEFT JOIN author a ON doc.cle_author=a.id_author 其中 a.id_author 为空;

发现她的所有 cle_author 数据都是伪造的,并且没有对 id_author 值的有效引用。

【讨论】:

    猜你喜欢
    • 2014-12-16
    • 2014-10-10
    • 2017-06-20
    • 2013-11-15
    • 2014-09-10
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多