MYSQL: невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено - PullRequest
1 голос
/ 18 августа 2010

Я получаю ошибку:

Невозможно добавить или обновить дочернюю строку: не удалось выполнить ограничение внешнего ключа (mydb/requests, CONSTRAINT requests_ibfk_5 ИНОСТРАННЫЙ КЛЮЧ (fixture_id) *

У меня следующая структура таблицы:

CREATE TABLE IF NOT EXISTS `requests` (
  `request_id` int(11) unsigned NOT NULL auto_increment,
  `fixture_id` int(11) unsigned NOT NULL,
  `user_id` int(11) unsigned NOT NULL,
  `date_added` datetime NOT NULL,
  `date_modified` datetime default NULL,
  PRIMARY KEY  (`request_id`),
  UNIQUE KEY `fixture_id_2` (`fixture_id`,`user_id`),
  KEY `user_id` (`user_id`),
  KEY `date_added` (`date_added`),
  KEY `fixture_id` (`fixture_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=17 ;


CREATE TABLE IF NOT EXISTS `fixtures` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `fix_id` int(11) unsigned NOT NULL default '0',
  `fixture_date` date default NULL,
  `kickoff` time default NULL,
  `venue` varchar(35) default NULL,
  `home_score` tinyint(4) default NULL,
  `away_score` tinyint(4) default NULL,
  `date_added` datetime default NULL,
  `date_modified` datetime default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `fix_id` (`fix_id`),
  KEY `fixture_date` (`fixture_date`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=383 ;


ALTER TABLE `requests`
  ADD CONSTRAINT `requests_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE,
  ADD CONSTRAINT `requests_ibfk_5` FOREIGN KEY (`fixture_id`) REFERENCES `fixtures` (`fix_id`) ON DELETE CASCADE ON UPDATE CASCADE;

Если я обновляю запись в поле fix_id родительской таблицы (fixtures), которая имеет общий идентификатор (fixture_id) в дочерней таблице (запросы), я получаю вышеуказанную ошибку.

Я не могу понять, почему это ограничение целостности не выполняется. Обе таблицы уже содержат правильные данные, которые должны каскадироваться?

Любая помощь с благодарностью.

Ответы [ 2 ]

0 голосов
/ 06 мая 2013

Эта ошибка возникает из-за ссылки на другую таблицу, в обеих таблицах должны присутствовать одинаковые идентификаторы / данные. Если нет, используйте условия для удаления несуществующих данных.

пример обновить имя таблицы a set = 'field' (выбрать поле из другой таблицы b), где a.data = b.data;

0 голосов
/ 18 августа 2010

Это была моя собственная ошибка.У меня было два иностранных ограничения на одно поле в реальности.Мне просто нужно было снять одну.

...