Ошибка # 1452 при изменении таблицы mySQL для добавления внешнего ключа - PullRequest
3 голосов
/ 01 апреля 2011

Пытаюсь помочь стажеру с ее проектом.Она хочет добавить внешние ключи к существующей таблице, но этот запрос:

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 ]

4 голосов
/ 01 апреля 2011

Возможно, у вас есть противоречивые данные между вашими двумя таблицами.Эта ошибка означает, что в вашей таблице document имеется значение cle_author, для которого нет соответствующей записи в таблице author.Поскольку значение cle_author будет установлено как внешний ключ, каждое значение для этого поля должно иметь соответствующую запись в поле id_author таблицы author.

0 голосов
/ 01 апреля 2011

На эту страницу: Ошибка Mysql 1452 - Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется

проверил данные интерна с помощью

SELECT cle_author FROM документdoc СЛЕДУЕТ ПРИСОЕДИНИТЬСЯ к автору вкл.

...